ノンパラメトリック検定

Pythonで学ぶ仮説検定

James Chapman

Curriculum Manager, DataCamp

パラメトリック検定

  • z検定、t検定、ANOVAはすべてパラメトリック検定
  • 正規分布を仮定
  • 十分なサンプルサイズが必要
Pythonで学ぶ仮説検定

共和党得票率の小規模データ

print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12
80          Texas   Red River         68.507522         69.944817
84          Texas      Walker         60.707197         64.971903
33       Kentucky      Powell         57.059533         61.727293
81          Texas  Schleicher         74.386503         77.384464
93  West Virginia      Morgan         60.857614         64.068711
Pythonで学ぶ仮説検定

pingouin.ttest() による結果

  • 5ペアでは対応のあるt検定のサンプルサイズ条件を満たさない:
  • 各サンプルで少なくとも30ペアの観測が必要。
alpha = 0.01

import pingouin pingouin.ttest(x=repub_votes_potus_08_12_small['repub_percent_08'], y=repub_votes_potus_08_12_small['repub_percent_12'], paired=True, alternative="less")
               T  dof alternative     p-val          CI95%   cohen-d    BF10     power
T-test -5.875753    4        less  0.002096  [-inf, -2.11]  0.500068  26.468  0.239034
Pythonで学ぶ仮説検定

ノンパラメトリック検定

  • ノンパラメトリック検定はパラメトリックの仮定・条件を回避する
  • 多くのノンパラメトリック検定はデータの順位を使用する
x = [1, 15, 3, 10, 6]
from scipy.stats import rankdata
rankdata(x)
array([1., 5., 2., 4., 3.])
Pythonで学ぶ仮説検定

ノンパラメトリック検定

  • ノンパラメトリック検定は、サンプルサイズが小さい場合や正規分布に従わないデータに対してパラメトリック検定より信頼性が高い
Pythonで学ぶ仮説検定

ノンパラメトリック検定

  • ノンパラメトリック検定は、サンプルサイズが小さい場合や正規分布に従わないデータに対してパラメトリック検定より信頼性が高い

 

ウィルコクソン符号順位検定
  • フランク・ウィルコクソンが1945年に開発
  • 最初期のノンパラメトリック手法の一つ
Pythonで学ぶ仮説検定

ウィルコクソン符号順位検定(ステップ1)

  • データペアの差の絶対値に順位を付けて処理する
repub_votes_small['diff'] = repub_votes_small['repub_percent_08'] -
                            repub_votes_small['repub_percent_12']
print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12      diff
80          Texas   Red River         68.507522         69.944817 -1.437295
84          Texas      Walker         60.707197         64.971903 -4.264705
33       Kentucky      Powell         57.059533         61.727293 -4.667760
81          Texas  Schleicher         74.386503         77.384464 -2.997961
93  West Virginia      Morgan         60.857614         64.068711 -3.211097
Pythonで学ぶ仮説検定

ウィルコクソン符号順位検定(ステップ2)

  • データペアの差の絶対値に順位を付けて処理する
repub_votes_small['abs_diff'] = repub_votes_small['diff'].abs()
print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12      diff  abs_diff
80          Texas   Red River         68.507522         69.944817 -1.437295  1.437295
84          Texas      Walker         60.707197         64.971903 -4.264705  4.264705
33       Kentucky      Powell         57.059533         61.727293 -4.667760  4.667760
81          Texas  Schleicher         74.386503         77.384464 -2.997961  2.997961
93  West Virginia      Morgan         60.857614         64.068711 -3.211097  3.211097
Pythonで学ぶ仮説検定

ウィルコクソン符号順位検定(ステップ3)

  • データペアの差の絶対値に順位を付けて処理する
from scipy.stats import rankdata
repub_votes_small['rank_abs_diff'] = rankdata(repub_votes_small['abs_diff'])
print(repub_votes_small)
            state      county  repub_percent_08  repub_percent_12      diff  abs_diff  rank_abs_diff
80          Texas   Red River         68.507522         69.944817 -1.437295  1.437295            1.0
84          Texas      Walker         60.707197         64.971903 -4.264705  4.264705            4.0
33       Kentucky      Powell         57.059533         61.727293 -4.667760  4.667760            5.0
81          Texas  Schleicher         74.386503         77.384464 -2.997961  2.997961            2.0
93  West Virginia      Morgan         60.857614         64.068711 -3.211097  3.211097            3.0
Pythonで学ぶ仮説検定

ウィルコクソン符号順位検定(ステップ4)

            state      county  repub_percent_08  repub_percent_12      diff  abs_diff  rank_abs_diff
80          Texas   Red River         68.507522         69.944817 -1.437295  1.437295            1.0
84          Texas      Walker         60.707197         64.971903 -4.264705  4.264705            4.0
33       Kentucky      Powell         57.059533         61.727293 -4.667760  4.667760            5.0
81          Texas  Schleicher         74.386503         77.384464 -2.997961  2.997961            2.0
93  West Virginia      Morgan         60.857614         64.068711 -3.211097  3.211097            3.0
  • 負・正の差の順位の合計を求める
T_minus = 1 + 4 + 5 + 2 + 3

T_plus = 0
W = np.min([T_minus, T_plus])
0
Pythonで学ぶ仮説検定

pingouin.wilcoxon() による実装

alpha = 0.01
pingouin.wilcoxon(x=repub_votes_potus_08_12_small['repub_percent_08'],
                  y=repub_votes_potus_08_12_small['repub_percent_12'],
                  alternative="less")
          W-val alternative    p-val  RBC  CLES
Wilcoxon    0.0        less  0.03125 -1.0  0.72

0.03125 > 0.01 のため、$H_0$ を棄却しない

Pythonで学ぶ仮説検定

練習しましょう!

Pythonで学ぶ仮説検定

Preparing Video For Download...