2016-04-15 18 views
0

Ich habe eine Datenmatrix namens mydf, die die 10 Hauptkomponenten (10 Dimensionen) im galaktischen Raum mit 5 Proben enthält. Ich möchte den Schwerpunkt (Gravitationszentrum) der Proben mit allen PCs und den Abstand für jede Probe von diesem Schwerpunkt finden. Wie können wir das in R machen?Berechnen Sie den multidimensionalen Abstand vom Zentrum des galaktischen Raums

mydf<- structure(list(Sample = c("1", "2", "4", "5", "6"), PCA.1 = c(0.00338, 
    -0.020373, -0.019842, -0.019161, -0.019594), PCA.2 = c(0.00047, 
    -0.010116, -0.011532, -0.011582, -0.013245), PCA.3 = c(-0.008787, 
    0.001412, 0.003751, 0.00371, 0.004242), PCA.4 = c(0.011242, 0.000882, 
    -0.003662, -0.002206, -0.002449), PCA.5 = c(0.055873, -0.022664, 
    -0.014058, -0.024757, -0.020033), PCA.6 = c(-0.001511, 0.006226, 
    -0.005417, 0.000522, -0.003114), PCA.7 = c(-0.056734, -0.007418, 
    -0.01043, -0.006961, -0.006006), PCA.8 = c(0.005189, 0.008031, 
    -0.002979, 0.000743, 0.006276), PCA.9 = c(0.008169, -0.000265, 
    0.010893, 0.003233, 0.007316), PCA.10 = c(-0.000461, -0.003893, 
    0.008549, 0.005556, -0.001499)), .Names = c("Sample", "PCA.1", 
    "PCA.2", "PCA.3", "PCA.4", "PCA.5", "PCA.6", "PCA.7", "PCA.8", 
    "PCA.9", "PCA.10"), row.names = c(NA, 5L), class = "data.frame") 

Zum Beispiel ist dies das PCA Grundstück (offensichtlich in 2D) für diese 5 Proben, für die ich brauche, um den Schwerpunkt zu finden zunächst alle 10 Dimensionen verwenden. Dann müssen Sie den Abstand für jede Probe von diesem einen Schwerpunkt berechnen.

enter image description here

+0

Ihre Handlung war offenbar bedeutete eine Projektion der Punkte in einem 10-dimensionalen Raum auf der Ebene, die durch die ersten beiden Achsen gebildet sein, aber man verwendet stattdessen die erste Spalte so es waren nur die "Sample" -Werte. –

Antwort

1

Ich glaube nicht, es wäre so schwer sein, dass an den zehndimensionalen Punkten für gleichgewichteten Massen von diesen fünf Vektoren gegeben zu zeigen, dass die Summe der quadratischen Abstände von einem Punkt für minimiert werden würde ein Punkt, an:

> centroid = colMeans(mydf[-1]) 

> centroid 
    PCA.1  PCA.2  PCA.3  PCA.4  PCA.5  PCA.6  PCA.7  PCA.8  PCA.9  PCA.10 
-0.0151180 -0.0092010 0.0008656 0.0007614 -0.0051278 -0.0006588 -0.0175098 0.0034520 0.0058692 0.0016504 

Und dann wäre die Abstände:

> rowSums(sweep(mydf[-1], 2, centroid, "-")^2) 
      1   2   3   4   5 
0.0059118459 0.0005748535 0.0003223413 0.0005664300 0.0004386126 

Für die Werte in den beiden ersten Plotten „Dimensionen“ Ich würde es statt:

with(mydf, plot(PCA.2 ~ PCA.1)) 
points(x= -0.0151180, y= -0.0092010, col='red', pch=24) 
+0

Also, wenn Sie diese '> rowSums (sweep (mydf [-1], 2, centroid, "-")^2) ', berechnen Sie tatsächlich den Abstand vom Mittelwert aller Komponenten (10 Zentroide) oder von der Mittelwert der Zentroide (ein galaktischer Raum) für jedes Individuum? – MAPK

+0

Ich mache beides. Die 5 Punkte waren notwendigerweise in einem 10-dimensionalen Raum koplanar, also war ich mir sicher, dass es in dieser Situation gelingen würde. Ich war nicht so sicher, dass dies gelingen würde, wenn es mehr als 10 Punkte gäbe. –

Verwandte Themen