【问题标题】:Doing PCA with varimax rotation in R在 R 中使用 varimax 旋转进行 PCA
【发布时间】:2020-05-07 21:08:52
【问题描述】:

我的代码已经南下。

我正在使用以下方法从 csv 导入 578x17 数据表:

Data=read.csv("Data.csv", header=TRUE, sep=',', dec='.', row.names= 1 , stringsAsFactors=TRUE)

我的相关性和协方差矩阵是一样的。

当我尝试使用 Varimax Rotation 进行 PCA 和 PCA 时,我得到了相同的结果:

PCA=princomp(x = Data, cor = TRUE, scores = TRUE)
Varimax<-princomp(Data, rotation="varimax")

当我尝试以不同的方式进行 Varimax 旋转时,我得到:

varimax<-varimax(PCA$rotation[,1:5])

if (nc

我不确定问题是我的代码还是我的 .csv 文件,但我们将不胜感激!

【问题讨论】:

  • 投票结束,因为它是特定于代码的。如果删除代码行,那么演讲内容将变得完全不清楚。
  • 我对 R 不熟悉,因此不确定您为什么会收到错误消息,但这里有很多问题。首先,princomp 不接受 rotation 参数,所以它可能被忽略,这就是为什么(可能)你得到“相同的结果”;换句话说,你不是这样做 PCA+varimax 的。其次,varimax 旋转应该在 loadings 而不是特征向量上完成,PCA$rotation 是特征向量。因此,如果您想手动运行varimax,您应该采用不同的方式。在stats.stackexchange.com/questions/59213 中查看我的答案。
  • 谢谢!我发现了我的代码问题。非常感谢!
  • 发布你找到的解决方案@Matt

标签: r pca


【解决方案1】:

在 PCA 中使用 vegan 的 rda() 进行 varimax 旋转

此答案的基础知识来自:

https://stats.stackexchange.com/questions/59213/how-to-compute-varimax-rotated-principal-components-in-r

假设数据矩阵名称为mydata

library(vegan)
library(pracma)
pca.env = rda(mydata, scale=T)
loading = scores(pca.env, choices=c(1,2))$species    #choices determines which pc to be taken
rloading = varimax(loading)$loadings
iloading = t(pinv(rloading))
scores = scale(mydata) %*% iloading

双标

r = range(c(rloading, scores))
plot(scores, xlim = r, ylim= r, xlab= "PC1 ", ylab= "PC2 ")
arrows(0,0, rloading[,1], rloading[,2], length=0.1, col=2)
text(rloading[,1], rloading[,2], labels = colnames(mydata), pos=3, col=2)
text(scores[,1], scores[,2], labels = rownames(mydata), pos = 3)
abline(h=0, lty=3)
abline(v=0, lty=3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2015-07-09
    • 2014-06-26
    相关资源
    最近更新 更多