我在包含91列和2030行的数据表上运行prcomp函数,并获得了PCA图。但是,当我重新订购相同的数据表以便更容易对数据点进行颜色编码时,我得到了一个完全不同的PCA图。
列的顺序在prcomp()中是否重要?
请注意,所包含的代码是我以前在我实验室的人提供的,他不再在这里询问。我对它正在做的事情有一个适度的理解。
感谢您的帮助!
pcaPlotter3d <- function(fileName, startColumn, endColumn){
x<- read.table(fileName, sep = '\t', header =TRUE, stringsAsFactors = FALSE)
pcaData <- prcomp(~., x[,startColumn:endColumn], na.action=na.exclude, scale = TRUE)
library(scatterplot3d)
colorList <- c(rep("magenta", 2), rep("blue", 12), rep("red",33), rep("purple", 2), rep("green", 6), rep("black",36))
shapeList <- c(rep(19, 91))#, rep(15, 24))
with (pcaData, {
pointsForPlot <- scatterplot3d(pcaData$rotation[,1:3], color=colorList,
pch = shapeList, main = "TAP Proteins PCA", mar = c(3,3,3,5), xlab = "PC1 (16.5%)", ylab = "PC2 (3.67%)", zlab = "PC3 (2.79%)",
col.grid = NULL)
pointsForPlot.coords <- pointsForPlot$xyz.convert(pcaData$rotation[,1:3])
legend(8,5, bty = "n", xpd = TRUE, cex = 0.75, inset = .1,
title = "Groups", c("Bio", "EF", "IF", "RF", "Rib", "Unk"),
col = c("magenta", "blue", "red", "purple", "green", "black") , pch = c(19,19,19,19,19,19));
})
print(summary(pcaData))
}
答案 0 :(得分:1)
在透视图中很难看到,但似乎所有发生的事情都是PC2和PC3的迹象已被翻转。 (特征向量/ PCA方向仅定义为符号的变化,而改变列的顺序等微不足道的变化确实会导致它们翻转。)假定方差的惯性/比例相同且范围相同轴被反转(例如,PC2在图1中从-0.1变为0.5,在图2中从-0.5变为0.1),这是最可能的解释。如果要恢复原始图,可以在适当的位置简单地将PC2和PC3坐标乘以-1 ...