통계
[3-2] 윌콕슨의 부호순위 검정
codingmemory
2022. 2. 7. 21:19
import numpy as np
import pandas as pd
In [1]:
# Wilcoxon 검정이란 모집단이 정규성을 만족하지 못할 때 사용
# 두 모집단이 서로 연관성을 가진다면,윌콕슨 부호 순위 검정을
# 두 모집단이 서로 독립이라면, wilcoxon rank sumtest 혹은 Mann - Whitney test 검정 방법사용
# 윌콕슨부호순위검정
# 두 그룹의 평균이 같은지 여부를 비교하는 비모수적 분석 방법
In [4]:
# 1.두 그룹간 차이를 구한다
df= pd.read_csv('./data/ch11_training_rel.csv')
df1=df[:6]
df1
Out[4]:
전 | 후 | |
---|---|---|
0 | 59 | 41 |
1 | 52 | 63 |
2 | 55 | 68 |
3 | 61 | 59 |
4 | 59 | 84 |
5 | 45 | 37 |
In [5]:
diff =df1['후']-df1['전']
df1['차']=diff
df1
<ipython-input-5-a3ca67aca6c9>:2: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df1['차']=diff
Out[5]:
전 | 후 | 차 | |
---|---|---|---|
0 | 59 | 41 | -18 |
1 | 52 | 63 | 11 |
2 | 55 | 68 | 13 |
3 | 61 | 59 | -2 |
4 | 59 | 84 | 25 |
5 | 45 | 37 | -8 |
In [16]:
# 차이의 절대값이 작은 거 부터 순위를 부여한다
from scipy import stats
rank= stats.rankdata(abs(diff)).astype(int)
df1['rank']=rank
df1
<ipython-input-16-2cc46d45224a>:4: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df1['rank']=rank
Out[16]:
전 | 후 | 차 | rank | |
---|---|---|---|---|
0 | 59 | 41 | -18 | 5 |
1 | 52 | 63 | 11 | 3 |
2 | 55 | 68 | 13 | 4 |
3 | 61 | 59 | -2 | 1 |
4 | 59 | 84 | 25 | 6 |
5 | 45 | 37 | -8 | 2 |
In [10]:
r_minus=np.sum((diff<0)*rank)
r_plus=np.sum((diff>0)*rank)
r_minus,r_plus
#마이너스의 합이 작으므로 검정통계량은 더 작은 마이너스값으로 채택
#이 검정통계량이 임곗값보다 작으면 귀무가설 기각
#윌콕슨의 test에서 0.05의 값은 13 그러므로 귀무가설 기각이 된 것을 알 수 있음
Out[10]:
(8, 13)
In [21]:
T,p =stats.wilcoxon(df['전'],df['후'])
p
#0.05보다 작으므로 귀무가설 기각됨
Out[21]:
0.03623390197753906
반응형