prcomp和ggbiplot:无效的'rot'值

时间:2014-11-19 12:16:20

标签: r bioinformatics pca ggbiplot

我尝试使用R对我的数据进行PCA分析,然后使用prcompggbiplot找到this nice guide。我的数据是两种样品类型,每种样品具有三个生物重复(即6行)和约20000个基因(即变量)。首先,使用指南中描述的代码获取PCA模型并不起作用:

>pca=prcomp(data,center=T,scale.=T)
Error in prcomp.default(data, center = T, scale. = T) : 
cannot rescale a constant/zero column to unit variance

但是,如果我删除scale. = T部分,它可以正常工作,我会得到一个模型。为什么会这样,这是否是下面错误的原因?

> summary(pca)
Importance of components:
                             PC1       PC2       PC3       PC4       PC5
Standard deviation     4662.8657 3570.7164 2717.8351 1419.3137 819.15844
Proportion of Variance    0.4879    0.2861    0.1658    0.0452   0.01506
Cumulative Proportion     0.4879    0.7740    0.9397    0.9849   1.00000

其次,绘制PCA。即使只使用基本代码,我也会得到一个错误和一个空图:

> ggbiplot(pca)
Error: invalid 'rot' value

这是什么意思,我该如何解决?是否与制作PCA的(非)规模有关,还是有所不同?我认为它必须与我的数据有关,因为如果我使用标准示例代码(下面),我会得到一个非常好的PCA图。

> data(wine)
> wine.pca=prcomp(wine,scale.=T)
> print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, 
  ellipse = TRUE, circle = TRUE))

[编辑1]我尝试以两种方式对数据进行子集化:1)删除所有行,所有行都为0,以及2)删除所有列,任何行都为0.第一个子集仍然给我{{1错误,但没有删除任何0的列的那些错误。为什么是这样?这对我的PCA有何影响?

另外,我尝试对原始数据(非缩放)和上面的子集化数据使用普通scale命令,并且它在两种情况下都有效。那么它与biplot有什么关系?

[编辑2]我已经上传了我的数据子集,当我没有删除所有零并在我这样做时,我会发现错误。我之前没有使用过gist,但我认为this就是这样。或this ......

1 个答案:

答案 0 :(得分:7)

转置数据后,我能够复制您的错误。第一个错误是主要问题。 PCA寻求最大化每个组件的方差,因此重要的是它不仅仅关注可能具有非常高的方差的一个变量。第一个错误:

Error in prcomp.default(tdf, center = T, scale. = T) : 
  cannot rescale a constant/zero column to unit variance

这告诉你,你的一些变量的方差为零(即无可变性)。看看PCA如何通过最大化方差来对事物进行分组,保留这些变量毫无意义。可以通过以下调用轻松删除它们:

df_f <- data[,apply(data, 2, var, na.rm=TRUE) != 0]

执行此过滤后,其余调用将正常运行

pca=prcomp(df_f,center=T,scale.=T)
ggbiplot(pca)