【问题标题】:How to calculate centroids in PCA?如何计算 PCA 中的质心?
【发布时间】:2016-03-24 19:51:25
【问题描述】:

为了比较 PCA 的每组的质心向量,我正在寻找一种方法来计算每台 PC 和组的质心。没有特别的图形,但在 MWE 中包含了一个图,以使其更具描述性。

library(ggbiplot)
data(wine)
wine.pca <- prcomp(wine, center = TRUE, scale. = TRUE)
print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, ellipse = TRUE, circle = TRUE))

【问题讨论】:

  • 检查betadisper in {vegan}
  • 这适用于上面的示例:dis &lt;- vegdist(wine.pca$x, "euclidean") betadisper(dis, wine.class, type = "centroid") 返回:... Average distance to centroid: barolo 2.163 grignolino 2.954 barbera 2.396 ... 这是到质心的平均距离,但目的是获得每台 PC 内质心的距离,因为它在例如之间以图形方式显示PC 3 和 4:plot(mod, axes = c(4,3))

标签: r ggplot2 pca


【解决方案1】:

此示例提供了一个数据框,其中包含来自 PCA 的质心坐标,然后可用于计算 PC 内质心之间的距离

library(ggbiplot)
data(wine)
wine.pca <- prcomp(wine, center = TRUE, scale. = TRUE)
df.wine.x <- as.data.frame(wine.pca$x)
df.wine.x$groups <- wine.class
pca.centroids <- aggregate(df.wine.x[,1:13], list(Type = df.wine.x$groups), mean)

例如,前两台 PC 的 barolo 和 grignolino 之间的欧几里得距离可以计算如下:

dist(rbind(pca.centroids[pca.centroids$Type == "barolo",2:3],pca.centroids[pca.centroids$Type == "grignolino",2:3]), method = "euclidean")

【讨论】:

    猜你喜欢
    • 2012-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2015-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多