나는 면접관의 스피어 만 상관 계수를 계산 중입니다. Interviewer_1에서 작동합니다 ... Scipy가 interviewer_2와 (와) 상관 관계가없는 것으로 인터럽트하는 방식을 이해하지 못합니다.일부 사례에서 Scipy Spearman 상관 계수가 NaN입니다.
import pandas as pd
from pandas import DataFrame
import scipy.stats
df = pd.DataFrame({'Interviewer': ['Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_1','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2','Interviewer_2'],
'Score_1': [-1,-1,-1,1,1,-1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,-1],
'Score_2': [1,-1,-1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]
})
df
샘플 데이터 수익률은 :
Score_1 Score_2
Interviewer
Interviewer_1 -2 -4
Interviewer_2 -16 -20
Scipy를 사용 : 나는 Excel에서 손으로이 공식을 사용하여 시도
def applyspearman(row):
row['Cor'] = scipy.stats.spearmanr(row['Score_1'], row['Score_2'])[0]
return row
df = df.groupby('Interviewer').apply(applyspearman)
df
Interviewer Score_1 Score_2 Cor
0 Interviewer_1 -1 1 -0.089087081
1 Interviewer_1 -1 -1 -0.089087081
2 Interviewer_1 -1 -1 -0.089087081
3 Interviewer_1 1 -1 -0.089087081
4 Interviewer_1 1 1 -0.089087081
5 Interviewer_1 -1 1 -0.089087081
6 Interviewer_1 -1 -1 -0.089087081
7 Interviewer_1 -1 -1 -0.089087081
8 Interviewer_1 1 -1 -0.089087081
9 Interviewer_1 1 -1 -0.089087081
10 Interviewer_2 -1 -1
11 Interviewer_2 -1 -1
12 Interviewer_2 -1 -1
13 Interviewer_2 -1 -1
14 Interviewer_2 -1 -1
15 Interviewer_2 -1 -1
16 Interviewer_2 -1 -1
17 Interviewer_2 -1 -1
18 Interviewer_2 -1 -1
19 Interviewer_2 -1 -1
20 Interviewer_2 -1 -1
21 Interviewer_2 -1 -1
22 Interviewer_2 -1 -1
23 Interviewer_2 1 -1
24 Interviewer_2 -1 -1
25 Interviewer_2 -1 -1
26 Interviewer_2 -1 -1
27 Interviewer_2 -1 -1
28 Interviewer_2 1 -1
29 Interviewer_2 -1 -1
(순위
Interviewer Score_1 Score_2
0 Interviewer_1 -1 1
1 Interviewer_1 -1 -1
2 Interviewer_1 -1 -1
3 Interviewer_1 1 -1
4 Interviewer_1 1 1
5 Interviewer_1 -1 1
6 Interviewer_1 -1 -1
7 Interviewer_1 -1 -1
8 Interviewer_1 1 -1
9 Interviewer_1 1 -1
10 Interviewer_2 -1 -1
11 Interviewer_2 -1 -1
12 Interviewer_2 -1 -1
13 Interviewer_2 -1 -1
14 Interviewer_2 -1 -1
15 Interviewer_2 -1 -1
16 Interviewer_2 -1 -1
17 Interviewer_2 -1 -1
18 Interviewer_2 -1 -1
19 Interviewer_2 -1 -1
20 Interviewer_2 -1 -1
21 Interviewer_2 -1 -1
22 Interviewer_2 -1 -1
23 Interviewer_2 1 -1
24 Interviewer_2 -1 -1
25 Interviewer_2 -1 -1
26 Interviewer_2 -1 -1
27 Interviewer_2 -1 -1
28 Interviewer_2 1 -1
29 Interviewer_2 -1 -1
df.groupby('Interviewer').sum()
는 합계를 산출 함수, abs 차이, d^2 및 d^(6 Σ의 D^2I)/(N (N^2-1))
interviewer_1, p = 0.878788
interviewer_2, p = 0.993985 - p = 1, 두 면접 대한 다른 결과를 얻었다
질문 :
- 왜 Interviewer_2 널은? NaN 문제는 순위 동점과 관련이 있습니까?
- Scipy의 결과가 내 결과와 다른 이유는 무엇입니까?
확실히 약간 이상한를 scipy 0.8의 변화 "때문이다. 0 : 묶음 처리 및 축을 추가하려면 다시 작성하십시오. " [(source)] (https://docs.scipy.org/doc/scipy-0.16.0/reference/generated/scipy.stats.spearmanr.html) –
사이드 노트 - 나는 당신이 'applyspearman'의'scipy.stats.spearmanr'을 그룹화 된 데이터 프레임의 추가 열로 모든 행에 할당하지 않습니까? 스피어 만 순위는 행 단위가 아닌 요약 통계를 의미합니다. –
면접관이 요약 통계로 사용하고 있습니다. 그것이 내가 groupby를 적용하는 이유입니다. 나중에 필자의 분석에서 필자는 데이터 프레임을 면접관 당 한 줄로 편성하여 스피어맨 점수와의 전체 인터뷰를 계획 할 수있었습니다. – Christopher