我有一个包含 9 个样本(行)和 51608 个变量(列)的数据集,每当我尝试对其进行缩放时,我都会不断收到错误消息:
这工作正常
pca = prcomp(pca_data)
然而,
pca = prcomp(pca_data, scale = T)
给
> Error in prcomp.default(pca_data, center = T, scale = T) :
cannot rescale a constant/zero column to unit variance
显然,发布一个可重现的例子有点困难。任何想法可能是什么交易?
寻找常量列:
sapply(1:ncol(pca_data), function(x){
length = unique(pca_data[, x]) %>% length
}) %>% table
输出:
.
2 3 4 5 6 7 8 9
3892 4189 2124 1783 1622 2078 5179 30741
所以没有常数列。与 NA 相同-
is.na(pca_data) %>% sum
>[1] 0
这工作正常:
pca_data = scale(pca_data)
但后来两者仍然给出完全相同的错误:
pca = prcomp(pca_data)
pca = prcomp(pca_data, center = F, scale = F)
那么为什么我不能在这些数据上得到一个缩放的 pca 呢?好的,让我们 100% 确定它不是恒定的。
pca_data = pca_data + rnorm(nrow(pca_data) * ncol(pca_data))
同样的错误。数字数据?
sapply( 1:nrow(pca_data), function(row){
sapply(1:ncol(pca_data), function(column){
!is.numeric(pca_data[row, column])
})
} ) %>% sum
还是一样的错误。我没主意了。
编辑:更多和一个黑客至少可以解决它。
后来,仍然很难对这些数据进行聚类,例如:
Error in hclust(d, method = "ward.D") :
NaN dissimilarity value in intermediate results.
在某个截止值(例如 < 1 到零)下修整值无效。最终起作用的是修剪所有列中超过 x 个零的列。为 # zeros <= 6 工作,但 7+ 给出错误。不知道这是否意味着这是一个普遍的问题,或者这是否只是碰巧捕获了有问题的列。仍然会很高兴听到是否有人有任何想法,因为只要没有变量全为零(或以另一种方式保持不变),这应该可以正常工作。