prcomp和ggbiplot:无效';腐烂';价值

prcomp和ggbiplot:无效';腐烂';价值,r,bioinformatics,pca,ggbiplot,R,Bioinformatics,Pca,Ggbiplot,我试图用R对我的数据进行PCA分析,我发现,使用prcomp和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

我试图用R对我的数据进行PCA分析,我发现,使用
prcomp
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
但是,如果我删除
比例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
其次,绘制主成分分析。即使只使用基本代码,我也会得到一个错误和一个空的绘图图像:

> 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,但我想是的。或者…

在转换您的数据后,我能够复制您的错误。第一个错误是主要问题。主成分分析寻求最大化每个成分的方差,因此重要的是,它不能只关注一个方差可能非常高的变量。第一个错误:

Error in prcomp.default(tdf, center = T, scale. = T) : 
  cannot rescale a constant/zero column to unit variance
这是在告诉您,您的一些变量具有零方差(即无可变性)。鉴于主成分分析法试图通过最大化方差对事物进行分组,保留这些变量是没有意义的。通过以下调用可以轻松删除它们:

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

是否有任何方法可以为您提供数据集的数据,例如数据集的
dput
?或者,如果它是大的,仍然产生错误的子集?很难尝试和诊断我们无法重现的问题。我现在添加了一些数据,非常感谢您的帮助!您在gist上提供的数据不会重现错误。我下载了这个文件,并且
prcomp
ggbiplot
运行时没有出错。我现在意识到我上传的数据没有被转置(因为我在脚本中这样做),我也可以按原样对该数据运行
prcomp
。我感兴趣的是一个包含10k个变量(或者我将其子集为多少个变量)和20个左右不同样本类型的PCA。转置数据集的
prcomp
对您有用吗?好的,太好了!虽然我不完全理解你的代码。。。删除没有差异的列(
var
)?如果存在零,那么这与删除所有列有什么不同?(我明白两者之间有明显的区别,但不完全是如何区别的)。我删除零的代码如下所示:
nonzero=data[,apply(data,2,function(x)all(x>0))]
区别在于我删除的是方差为0的列,而不是包含0的列。零可能很重要,但没有方差的变量在主成分分析中没有价值。
pca=prcomp(df_f,center=T,scale.=T)
ggbiplot(pca)