2014-11-20 1 views
1

대략적인 크기 10,000 x 15,000 (events x samples)의 매우 큰 데이터 행렬에서 상관 관계를 실행하려면 R을 사용합니다. 이 데이터 세트에는 -15 : 15, NA, NaN, inf 및 -inf의 부동 소수점 값이 포함됩니다. 문제를 단순화하기 위해 한 번에 두 행의 행렬을 사용하도록 선택했습니다. vector1, vector2라고 부릅니다. 명령은 다음과 같습니다.R cor(), method = "pearson"은 NA를 반환하지만 method = "spearman"은 value를 반환합니다. 왜?

CorrelationSpearman = cor(vector1,vector2, method="spearman",use="pairwise.complete.obs") 
CorrelationPearson = cor(vector1,vector2,method="pearson",use="pairwise.complete.obs") 

내 행렬에있는 대부분의 행 벡터는 CorrelationPearson = NA가됩니다. CorrelationSpearman 값에 문제가없는 것으로 보입니다. 행렬 치수가 정확한지 확인하고 잘 작동하는 작은 데이터에 대한 테스트를 실행했습니다. 이것이 일어날 수있는 몇 가지 가능한 이유는 무엇입니까?

+0

'Inf'는 'Pearson's'에 문제를 일으킬 것입니다. 'cor (c (1 : 3, Inf), 1 : 4, method = "pearson")를 확인하십시오; cor (c (1 : 3, Inf), 1 : 4, method = "spearman")'. 나는'Infear'가 순위를 매길 수 있기 때문에'Spearman's'이 괜찮다고 가정합니다. – user20650

답변

1

Pearson correlation coefficient은 평균 및 (공) 분산을 산정하는 것에 의존합니다. 무한한 값은 무한한 평균과 무한한 분산으로 이어져 계산을 해칩니다. SpearmanKendall 상관 계수는 랭크 기반이므로 무한 값으로 잘 정렬 할 수 있습니다 (그러나 샘플에서는 묶인 값을주의하십시오!).

시도 :

> lix <- is.infinite(vector1) | is.infinite(vector2) 
> cor(vector1[!lix], vector2[!lix], method = "pearson", use = "pairwise.complete.obs") 

이 단지 무한한 값으로 모든 쌍을 뽑고. 더 일반적으로이 작업을 수행하려면이 같은 기능은 유용하다 : 단지 NAS로 무한 값을 변환하고, 당신이 맞는 볼 다음 use 인수는 그 NA 케이스를 처리 할 수 ​​

> inf2NA <- function(x) { x[is.infinite(x)] <- NA; x } 
> cor(inf2NA(vector1), inf2NA(vector2), ...) 

.