2016-08-25 5 views
0

많은 누락 값이있는 행렬이 있고 열 사이의 상관 관계를 계산하려고합니다. `cor()`는 전체 행렬과 주어진 행 쌍이 주어질 때 일관성없는 결과를 나타냅니다.

누락 값을 처리하기 위해 원하는대로 I

cor(matrix,use="complete") 

이 더 NA 값을 갖는 매트릭스를 제공 사용. I는 (A)의 두 컬럼 및 B

cor(matrix[,A],matrix[,B],use="complete") 

간의 페어 상관을 수행 할 경우, I는 행렬의 [A, B] 엔트리와는 다른 결과를 얻는다.

두 변수 사이의 플롯을 보면 두 번째 결과가 더 합리적인 것처럼 보입니다.

이러한 불일치는 어디에서 비롯되었을 수 있습니까?

+0

안녕하십니까. 사람들이 답변을 제공 할 수 있도록 일반적으로 재현 가능한 예를 만들기 위해 질문에 데이터를 추가해야합니다. http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example을 읽으십시오. – dww

답변

0

"complete.obs""pairwise.complete.obs"의 차이점을 묻습니다. use = "complete.obs" 들어

## example matrix 
set.seed(0);X <- matrix(rnorm(10*3),ncol=3) 
X[1:2,1] <- NA 
X[3:4,2] <- NA 
X[5:6,3] <- NA 

#    [,1]  [,2]  [,3] 
# [1,]   NA 0.7635935 -0.22426789 
# [2,]   NA -0.7990092 0.37739565 
# [3,] 1.329799263   NA 0.13333636 
# [4,] 1.272429321   NA 0.80418951 
# [5,] 0.414641434 -0.2992151   NA 
# [6,] -1.539950042 -0.4115108   NA 
# [7,] -0.928567035 0.2522234 1.08576936 
# [8,] -0.294720447 -0.8919211 -0.69095384 
# [9,] -0.005767173 0.4356833 -1.28459935 
#[10,] 2.404653389 -1.2375384 0.04672617 

## complete 
cor(X, use = "complete.obs") 
#   [,1]  [,2]  [,3] 
#[1,] 1.00000000 -0.69629279 -0.09773585 
#[2,] -0.69629279 1.00000000 -0.01228196 
#[3,] -0.09773585 -0.01228196 1.00000000 

## pairwise 
cor(X, use = "pairwise.complete.obs") 
#   [,1]  [,2]  [,3] 
#[1,] 1.00000000 -0.5531396 0.08229729 
#[2,] -0.55313958 1.0000000 -0.10786401 
#[3,] 0.08229729 -0.1078640 1.00000000 

적어도 하나 NA있는 행은 삭제된다. 그것은 본질적으로 여기

X1 <- X[7:10, ] ## only the last 4 rows have no `NA` 
cor(X1) 
#   [,1]  [,2]  [,3] 
#[1,] 1.00000000 -0.69629279 -0.09773585 
#[2,] -0.69629279 1.00000000 -0.01228196 
#[3,] -0.09773585 -0.01228196 1.00000000 

을 수행 그래서, (1,2) 또는 (2,1) 항목 -0.69629279 만 4 데이터로 계산됩니다. 그러나 pairwise하면 6 데이터로 계산할 수 있습니다.

cor(X[5:10, 1], X[5:10, 2]) 
# [1] -0.5531396