7

我正在尝试使用 R 对我的数据进行 PCA 分析,我发现这个很好的指南,使用prcompand ggbiplot。我的数据是两个样本类型,每个样本类型有三个生物学重复(即 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。第一个子集仍然给我scale错误,但不是那些已删除任何 0 的列。为什么是这样?这对我的 PCA 有何影响?

另外,我尝试biplot对上面的原始数据(非缩放)和子集数据使用普通命令,并且在这两种情况下都有效。所以这与ggbiplot?

[编辑 2] 我上传了我的数据子集,当我不删除所有零时,它给了我错误,而当我这样做时,它会工作。我以前没有使用过 gist,但我认为就是这样。或者这个...

4

1 回答 1

11

转置您的数据后,我能够复制您的错误。第一个错误是主要问题。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)
于 2014-12-04T13:34:17.003 回答