分割表に対する独立性の検定は,統計的仮説検定の重要な応用です.この手法は,χ$^2$検定と呼ばれます.
例として,Webサイトのボタンのクリック率がボタンの色によって変わるのかを統計的検定を用いて判断することを目的として分割表の検定を行うことにします.
色によってボタンの押されやすさが変わるのかを統計的検定を用いて判断することを目的として分割表の検定を行います.下表のようなボタンの押されやすさのデータがあったとします.
pushed | did not pushed | total | |
Blue | 20 | 230 | 250 |
Red | 10 | 40 | 50 |
total | 30 | 270 | 300 |
まず,ボタンの色によって押されやすさが全く変わらないとしたら,どのような結果になるのかを考えます.この時に期待される度数を期待度数と呼びます.
上記のボタンの押されやすさのデータの最下段を見ると,ボタンの色を無視したとすると,全体の1割の人がボタンを押していることになります.実験対象となっているのは
- 青いボタン:250人
- 赤いボタン:50人
- 青いボタンを押す人:25人
- 赤いボタンを押す人:5人
となります.このことから,期待度数は以下のようになります.
push | do not push | |
Blue | 20 | 230 |
Red | 10 | 40 |
これらの期待度数と実際に観測された度数の違いを調べて,違いが大きければボタンの色によって押されやすさが変わると言うことができます.
統計的検定の手法としては,χ$^2$検定を用います.なお,χ$^2$検定を行う際には期待度数が全て5以上であることが求められます.χ$^2$統計量は下式で得られます.
χ$^2 = \cfrac{(20 - 25)^{2}}{25} + \cfrac{(230 - 225)^{2}}{225} + \cfrac{(10 - 5)^{2}}{5} + \cfrac{(40 - 45)^{2}}{45} = 1 + \cfrac{1}{9} + 5 + \cfrac{5}{9} $
ここに,$O_{ij}$はi行j列の観測度数で,$E_{ij}$は期待度数です.
実際に計算してみると,以下のようになります.
χ$^2 = \sum_{i=1}^{2} \sum_{j=1}^{2} \cfrac{(O_{ij} E_{ij})^{2}}{E_{ij}} \fallingdotseq 6.667$
上記の例のような2行2列の分割表におけるχ$^2$統計量の標本分布は,自由度1のχ$^2$分布に漸近的に従うことが証明されています.
これらをPythonで実装してみます.まずは,必要なモジュールのインポートを行います.
>>> import numpy as np
>>> import pandas as pd
>>> import scipy as sp
>>> from scipy import stats
>>> 1 - sp.stats.chi2.cdf(x = 6.667, df = 1)
0.009821437357809604
p値が0.05を下回っています.このことから,色によってボタンの押されやすさが優位に変わると判断できます.
分割表の検定を行います.まずはデータ(3-10-1-click_data.csv**)の読み込みです.
>>> click_data = pd.read_csv("3-10-1-click_data.csv")
>>> print(click_data)
color click freq
0 blue click 20
1 blue not 230
2 red click 10
3 red not 40
>>> cross = pd.pivot_table(
... data = click_data,
... values = "freq",
... aggfunc = "sum",
... index = "color",
... columns = "click"
... )
>>> print(cross)
click click not
color
blue 20 230
red 10 40
検定を行います.sp.stats.chi2_contingency関数を用います.デフォルトだと補正がかかるので,引数の設定に correction = False として補正を行わないように設定します.
>>> sp.stats.chi2_contingency(cross, correction = False)
(6.666666666666666, 0.009823274507519247, 1, array([[ 25., 225.],
[ 5., 45.]]))
計算結果は,χ$^2$統計量,p値,自由度,期待度数の順に出力されており,先の計算結果などとほぼ一致しています.
上記の事柄をJupyter Notebookで実行した結果はGitHubで見ることができます.
*p値:標本と帰無仮説との矛盾の目安となる指標.p値が小さいほど帰無仮説と標本が矛盾していると考え,p値は確率として表現される.
**3-10-1-click_data.csvの中身
color,click,freq
blue,click,20
blue,not,230
red,click,10
red,not,40
0 件のコメント :
コメントを投稿