カイ二乗($\chi^2$:chi squared)
・観測度数が期待度数からどれくらい離れているかを計算した値
・{(観測度数-期待度数)^2 / 期待度数}の総和
"どれくらい離れているか"を調べるには観測度数と期待度数の差を計算すればよさそうですね。ですがただ単に差をとって足し合わせると、プラスとマイナスで打ち消し合ってゼロになってしまいます。
そこで、二乗した総和にしてみましょう。(絶対値だとマイナスを掛けないといけないため、扱いにくい!)
数式で書くと以下のようになります。
a行b列の分割表におけるi行j列の観測度数がnij,期待度数がeijとすると
\chi^2 = \sum^a_{i=1}\sum^b_{j=1}\frac{(n_{ij}-e_{ij})^2}{e_{ij}}
連関(association)
Pythonで実践
分割表を求める
・pd.crosstab(xarray, yarray)
import pandas as pd
# データ準備
df = sns.load_dataset('tips')
df['tip_rate'] = df['tip'] / df['total_bill']
pd.crosstab(df['sex'], df['time'])
$\chi^2$と期待度数を求める
・stats.chi2_contingency(cont_table, correction=False)
from scipy import stats
cont_table = pd.crosstab(df['sex'], df['time'])
stats.chi2_contingency(cont_table, correction=False)
結果
(10.277251918677742, 第1戻り値 -> $\chi^2$
0.0013468039268008766,
1,
array([[ 43.75409836, 113.24590164],
[ 24.24590164, 62.75409836]])) 第4戻り値 -> 期待度数
この結果の$\chi^2$を見ても大きいのか小さいのかわからないのですよね。
次回は、相関係数で学習したときと同様に標準化することを考えます。