2015-06-01 51 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不會忽視告訴我們有關警告訊息,但他們可能有...... –

相關問題