相关矩阵的主成分分析
Principal component analysis on a correlation matrix
许多函数可以对 R 中的原始数据执行主成分分析 (PCA)。通过原始数据,我理解任何数据框或矩阵,其行由观察索引,其列由测量标识。我们可以在 R 中的相关矩阵上执行 PCA 吗?哪个函数可以接受相关矩阵作为其在 R 中的输入?
如评论中所述,可以使用
ii <- as.matrix(iris[,1:4])
princomp(covmat=cor(ii))
这将为您提供与 princomp(iris,cor=TRUE)
相同的结果( 不是您想要的 - 后者使用完整的数据矩阵,但 returns当协方差矩阵转换为相关时计算的值)。
如果你有相关矩阵,你也可以手工完成所有相关计算:
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
在数值上相同的答案——特征向量的缩放不同——但是它给出了相同的结果。
许多函数可以对 R 中的原始数据执行主成分分析 (PCA)。通过原始数据,我理解任何数据框或矩阵,其行由观察索引,其列由测量标识。我们可以在 R 中的相关矩阵上执行 PCA 吗?哪个函数可以接受相关矩阵作为其在 R 中的输入?
如评论中所述,可以使用
ii <- as.matrix(iris[,1:4])
princomp(covmat=cor(ii))
这将为您提供与 princomp(iris,cor=TRUE)
相同的结果( 不是您想要的 - 后者使用完整的数据矩阵,但 returns当协方差矩阵转换为相关时计算的值)。
如果你有相关矩阵,你也可以手工完成所有相关计算:
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
在数值上相同的答案——特征向量的缩放不同——但是它给出了相同的结果。