R:prcomp,数据表中列的顺序问题?

时间:2016-09-07 22:10:49

标签: r pca

我在包含91列和2030行的数据表上运行prcomp函数,并获得了PCA图。但是,当我重新订购相同的数据表以便更容易对数据点进行颜色编码时,我得到了一个完全不同的PCA图。

列的顺序在prcomp()中是否重要?

请注意,所包含的代码是我以前在我实验室的人提供的,他不再在这里询问。我对它正在做的事情有一个适度的理解。

感谢您的帮助!

PCA Plot #1

PCA Plot #2

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))
}

1 个答案:

答案 0 :(得分:1)

在透视图中很难看到,但似乎所有发生的事情都是PC2和PC3的迹象已被翻转。 (特征向量/ PCA方向仅定义为符号的变化,而改变列的顺序等微不足道的变化确实会导致它们翻转。)假定方差的惯性/比例相同且范围相同轴被反转(例如,PC2在图1中从-0.1变为0.5,在图2中从-0.5变为0.1),这是最可能的解释。如果要恢复原始图,可以在适当的位置简单地将PC2和PC3坐标乘以-1 ...