【发布时间】:2015-01-16 22:59:25
【问题描述】:
我正在尝试使用 R 对我的数据进行 PCA 分析,我发现 this nice guide,使用 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,但我认为this 是它。或this...
【问题讨论】:
-
您有什么方法可以在gist 上为您提供数据集的
dput等数据吗?或者如果它很大,一个仍然产生错误的子集?很难尝试诊断我们无法重现的问题。 -
我现在添加了一些数据,感谢任何帮助!
-
您在 gist 上提供的数据不会重现该错误。我下载了文件,
prcomp和ggbiplot运行没有错误。 -
我现在意识到我上传的数据没有被转置(因为我在我的脚本中这样做了),而且我也可以按原样在这些数据上运行
prcomp。我感兴趣的是具有 10k 个变量(或者我子集的许多变量)和 20 种左右不同样本类型的 PCA。转置数据集的prcomp是否适合您?
标签: r bioinformatics pca ggbiplot