我试图用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但是,如果我删除了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,但我认为这是它。或者这..。
发布于 2014-12-04 13:34:17
在转换您的数据之后,我能够复制您的错误。第一个错误是主要问题。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)https://stackoverflow.com/questions/27016619
复制相似问题