计算距银河系中心的多维距离space
Calculate the multidimensional distance from the center of the galactic space
我有一个名为 mydf
的数据矩阵,其中包含银河 space 中的 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 个样本的 PCA 图(显然是二维的),我需要首先使用所有 10 个维度找到质心。然后需要计算每个样本与那个质心的距离。
我认为证明对于由这 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
为了绘制前两个 "dimensions" 中的值,我会用这个代替:
with(mydf, plot(PCA.2 ~ PCA.1 ))
points( x= -0.0151180, y= -0.0092010, col='red', pch=24)
我有一个名为 mydf
的数据矩阵,其中包含银河 space 中的 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 个样本的 PCA 图(显然是二维的),我需要首先使用所有 10 个维度找到质心。然后需要计算每个样本与那个质心的距离。
我认为证明对于由这 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
为了绘制前两个 "dimensions" 中的值,我会用这个代替:
with(mydf, plot(PCA.2 ~ PCA.1 ))
points( x= -0.0151180, y= -0.0092010, col='red', pch=24)