2016-04-15 55 views
0

我有一个数据矩阵叫mydf其中包含10个主成分(10维)银河系空间与5个样本。我想使用所有PC找到样本的质心(引力中心),并从该质心找出每个样本的距离。我们如何在R中做到这一点?计算从银河系中心的多维距离

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") 

例如,这是对这些5个样品用于我需要找到使用所有10个维度的第一质心的PCA图(显然在2D)。然后需要计算来自该一个质心的每个样本的距离。

enter image description here

+0

你的情节显然意味着是对点的10维空间上由前两个轴形成的平面上的投影,但你代替第一列,因此这只是“示例”值。 –

回答

1

我不认为这将是很难证明在由平方距离从一个点的总和将被最小化的5个矢量提供的10维穴等权重群众在一个点上:

> 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 

然后距离是:

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

对于前两个绘制值“维度”我会使用它代替:

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

所以,当你正在做这个'> rowSums(sweyd(mydf [-1],2,centroid,“ - ”)^ 2)',你实际上是在计算从所有组件的平均值(10个质心)每个人的质心(一个银河系空间)的平均值? – MAPK

+0

我正在做两个。这5点在10维空间中必定是共面的,所以我确信它会在这种情况下成功。如果超过10分,我不确定这会成功。 –