【发布时间】:2018-11-17 15:34:36
【问题描述】:
许多函数可以对 R 中的原始数据执行主成分分析 (PCA)。通过原始数据,我理解任何数据框或矩阵,其行由观察值索引,其列由测量值标识。我们可以对 R 中的相关矩阵进行 PCA 吗?哪个函数可以接受相关矩阵作为其在 R 中的输入?
【问题讨论】:
-
看看这个question。
princomp可以采用covmat输入参数(但它是协方差矩阵而不是相关矩阵)而不是初始数据帧。
许多函数可以对 R 中的原始数据执行主成分分析 (PCA)。通过原始数据,我理解任何数据框或矩阵,其行由观察值索引,其列由测量值标识。我们可以对 R 中的相关矩阵进行 PCA 吗?哪个函数可以接受相关矩阵作为其在 R 中的输入?
【问题讨论】:
princomp 可以采用 covmat 输入参数(但它是协方差矩阵而不是相关矩阵)而不是初始数据帧。
如 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 相同的数字答案 - 特征向量的缩放比例不同 - 但它给出了相同的结果)。
【讨论】: