2015-06-01 49 views
1

我有尺寸为39635 * 22的巨大矩阵。我需要计算这个矩阵的行的相关性。我已经检查过,矩阵中没有NA值。但是当我计算相关性时,我在最后的相关矩阵中遇到了很多NA。这是我做的步骤:为什么我在我的相关矩阵中得到NAs?

index2<-which(is.na(Gene), arr.ind=TRUE) 
> dim(index2) 
[1] 0 2 
W<-cor(t(Gene)) 
index<-which(is.na(W), arr.ind=TRUE) 
dim(index) 
[1] 9972018  2 

剂量任何人有想法,为什么我得到这么多的NA在我的最终相关矩阵?

+1

你能告诉我们'str(t(Gene))'吗? –

+0

@BenBolker,我更新了帖子。 – Robin

+2

我很好奇你为什么回滚我的编辑......你有什么特别的反对意见吗? (你也删除了'str(t(Gene))'信息,这很有用。)我认为我的编辑有用,但我不想进入编辑战。 –

回答

1

(不一定是答案,但太长了评论...)

到目前为止,我不能复制;它可能(?)可以想象为非常大的矩阵,但是我首先用完了内存。

nafun <- function(nrows,ncols=22, 
        rfun=runif) { 
    Gene <- matrix(runif(nrows*ncols),ncol=ncols) 
    W <- cor(t(Gene)) 
    sum(which(is.na(W))) 
} 
set.seed(101) 
nafun(1000) ## 0 
nafun(5000) ## 0 
nafun(10000) ## 0 
nafun(20000) ## Error: cannot allocate vector of size 3.0 Gb 
nafun(10000,rfun=rnorm) ## 0 
nafun(15000,rfun=rnorm) ## Error: cannot allocate vector of size 858.3 Mb 

有没有可能是你设置非有限,但不可─NA值在你的数据?值得一试

summary(c(Gene)) 
any(is.finite(Gene)) 

以及。

1

一种可能性可能是矩阵中的列是恒定的。这里有没有,由于这个问题产生NA值丢失的数据为例:

(m <- rbind(1:2, c(1, 3))) 
#  [,1] [,2] 
# [1,] 1 2 
# [2,] 1 3 
cor(m) 
#  [,1] [,2] 
# [1,] 1 NA 
# [2,] NA 1 
# Warning message: 
# In cor(m) : the standard deviation is zero 

你能确定这是否是基于警告消息它所产生的问题,或者你可以运行类似table(apply(t(Gene), 2, sd) == 0)

+1

好的可能性。我*希望* OP不会忽视告诉我们有关警告讯息,但他们可能有...... –

相关问题