prcomp和ggbiplot:无效的'rot'值

eri*_*fas 7 r bioinformatics pca ggbiplot

我正在尝试使用R对我的数据进行PCA分析,我找到了这个很好的指南,使用prcompggbiplot.我的数据是两种样本类型,每种类型有三个生物重复(即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
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除该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
Run Code Online (Sandbox Code Playgroud)

其次,绘制PCA.即使只是使用基本代码,我得到一个错误和一个空的情节图像:

> ggbiplot(pca)
Error: invalid 'rot' value
Run Code Online (Sandbox Code Playgroud)

这意味着什么,我该如何解决?是否与制作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))
Run Code Online (Sandbox Code Playgroud)

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

此外,我尝试biplot对原始数据(非缩放)和上面的子集化数据使用普通命令,并且它适用于这两种情况.这与它有关ggbiplot吗?

[编辑2]我已经上传了我的数据子集,当我不删除所有零并且在我执行时工作时,会给我错误.我以前没有使用要点,但我认为是它.或者, ...

cde*_*man 9

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

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

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

df_f <- data[,apply(data, 2, var, na.rm=TRUE) != 0]
Run Code Online (Sandbox Code Playgroud)

完成此过滤后,剩余的调用将正常工作

pca=prcomp(df_f,center=T,scale.=T)
ggbiplot(pca)
Run Code Online (Sandbox Code Playgroud)