【问题标题】:Principal component analysis on a correlation matrix相关矩阵的主成分分析
【发布时间】:2018-11-17 15:34:36
【问题描述】:

许多函数可以对 R 中的原始数据执行主成分分析 (PCA)。通过原始数据,我理解任何数据框或矩阵,其行由观察值索引,其列由测量值标识。我们可以对 R 中的相关矩阵进行 PCA 吗?哪个函数可以接受相关矩阵作为其在 R 中的输入?

【问题讨论】:

  • 看看这个questionprincomp 可以采用 covmat 输入参数(但它是协方差矩阵而不是相关矩阵)而不是初始数据帧。

标签: r pca


【解决方案1】:

如 cmets 中所述,您可以使用

ii <- as.matrix(iris[,1:4])
princomp(covmat=cor(ii))

这将为您提供与princomp(iris,cor=TRUE) 等效的结果(这不是您想要的 - 后者使用完整的数据矩阵,但返回当协方差矩阵转换为相关时计算的值)。


如果您有相关矩阵,您也可以手动进行所有相关计算:

cc <- cor(ii)
e1 <- eigen(cc)

标准偏差:

sqrt(e1$values)
[1] 1.7083611 0.9560494 0.3830886 0.1439265

方差比例:

e1$values/sum(e1$values)
[1] 0.729624454 0.228507618 0.036689219 0.005178709

您可以通过e1$vectors 获取负载。通过as.matrix(iris) %*% e1$vectors) 计算分数(根据this CV question)(这不会给出与princomp()$scores 相同的数字答案 - 特征向量的缩放比例不同 - 但它给出了相同的结果)。

【讨论】:

  • 如果使用命令 res.pca=princomp(covmat=cor(iris)) 我无法通过 factominer 包查看结果。即,我使用命令 fviz_pca_ind(res.pca) 并且我得到了答案“对象 res.pca 没有元素分数。请使用参数分数 = TRUE 的函数 princomp()”。因此,我在 princomp 函数中包含了参数分数,但我仍然收到这个 aswer。
  • 您试图在不访问原始数据的情况下可视化 PCA 分数的分布......如果您没有原始数据,您希望图表向您显示什么... ??
猜你喜欢
  • 2011-12-11
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多