在R中用变差旋转做PCA。

问题描述 投票:0回答:1

我的代码出了问题。

我从csv导入一个578x17的数据表,使用的是。

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

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

当我尝试做PCA和Varimax Rotation的PCA时,我得到了同样的结果。

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

当我尝试用不同的方式进行Varimax旋转时,我得到的结果是:

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

if (nc < 2) return(x) 出错:参数长度为零。

我不知道是我的代码出了问题,还是我的.csv文件出了问题,但如果能得到帮助,我将非常感激

r pca
1个回答
0
投票

在PCA中使用vegan's rda()进行变位旋转

本答案的基本内容已从。

https:/stats.stackexchange.comquestions59213 how-to-comput-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)
© www.soinside.com 2019 - 2024. All rights reserved.