2014-10-21 3 views
1

프로그래밍 및 통계에 다소 익숙하므로 공식적으로 올바르지 않은 경우이 질문을 개선하는 데 도움을주십시오.Python : 범주 데이터의 순위 순서 상관

나는 MonteCarlo 시뮬레이션에서 생성 한 많은 매개 변수와 두 개의 결과 벡터를 가지고 있습니다. 이제 결과에 대한 각 매개 변수의 영향을 테스트하고 싶습니다. Kendall의 타우와 함께 일하는 스크립트가 있습니다. 이제 저는 스피어 먼 (Spearman)과 피어슨 (Pearson)과 비교하고 싶습니다. 예 :

from scipy.stats import spearmanr, kendalltau, pearsonr 
result = [106, 86, 100, 101, 99, 103, 97, 113, 112, 110] 
parameter = ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'] 
kendalltau(parameter, result) 

>> (0.14907119849998596, 0.54850624613917143) 

그러나 나는 spearmanr 또는 pearsonr 내가 오류를 얻을에 대해 동일한 시도합니다. 이 기능은 Scipy에서 구현되지 않은 것 같습니다. 범주 형 데이터에 대한 상관 계수를 얻는 간단한 방법을 알고 있습니까?

+0

무엇이 작동하지 않았고 어떤 오류가 있습니까? – Anzel

답변

4

실제로 spearmanr이 작동하지만 pearsonr은 배열의 평균을 계산할 필요가 없기 때문에 dtype은 문자열에 맞지 않습니다. 아래를 참조

from scipy.stats import spearmanr, kendalltau, pearsonr 

result = [106, 86, 100, 101, 99, 103, 97, 113, 112, 110] 

parameter = ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'] 

spearmanr(result, parameter) 

(0.17407765595569782, 0.63053607555697644)

help(pearsonr) 

Help on function pearsonr in module scipy.stats.stats: 

pearsonr(x, y) 
    Calculates a Pearson correlation coefficient and the p-value for testing 
    non-correlation. 

    The Pearson correlation coefficient measures the linear relationship 
    between two datasets. Strictly speaking, Pearson's correlation requires 
    that each dataset be normally distributed. Like other correlation 
    coefficients, this one varies between -1 and +1 with 0 implying no 
    correlation. Correlations of -1 or +1 imply an exact linear 
    relationship. Positive correlations imply that as x increases, so does 
    y. Negative correlations imply that as x increases, y decreases. 

    The p-value roughly indicates the probability of an uncorrelated system 
    producing datasets that have a Pearson correlation at least as extreme 
    as the one computed from these datasets. The p-values are not entirely 
    reliable but are probably reasonable for datasets larger than 500 or so. 

    Parameters 
    ---------- 
    x : 1D array 
    y : 1D array the same length as x 

    Returns 
    ------- 
    (Pearson's correlation coefficient, 
    2-tailed p-value) 

    References 
    ---------- 
    http://www.statsoft.com/textbook/glosp.html#Pearson%20Correlation 

변환 'A'를 1로, 'B'를 2로, 예를 들어이 도움이

params = [1 if el == 'A' else 2 for el in parameter] 

print params 

[1, 2, 1, 2, 1, 2, 1, 2, 1, 2] 

pearsonr(params, result) 

(-0.012995783552244984, 0.97157652425566488) 

희망을.

+0

Strange - "spearmanr"은 나에게 "ValueError : 문자열을 부동으로 변환 할 수 없습니다 : A''를 줄 것입니다. 그러나 그것을 숫자로 변환하는 아이디어는 두 가지 모두에 대해 잘 작동합니다! 어쩌면 큰 코드 블록에서 답을 얻고 싶을 것입니다. 거의 그것을 간과했다. – n1000

+0

두 개 이상의 카테고리에도 적용됩니다. 맞습니까? – n1000

+0

@ n1000 네, 요소들 사이에 의미있는 관계를 찾으려고하기 때문에 ** list ** 1d 배열을 유지해야합니다. – Anzel