tetsunosukeのnotebook

tetsunosukeのメモです

Rでカイ二乗検定 を pandas/scipy で

Rでカイ二乗検定Pythonで行います。

カイ二乗検定を行うだけであればpandasは必要なさそうです。

Rで下記のように行っていたコードを、

chisq.test(
  c(10, 10, 10, 25, 1, 4)
)


scipy.stats.chi2_contingencyに渡すために、本来同数であれば全部10回ずつになる、という仮定を並べておきます。

>>> import scipy.stats
>>> obs = np.array(10,10,10,10,10,10], [10,10,10,25,1,4)
>>> res = scipy.stats.chi2_contingency(obs)
>>> res[0:2]
(16.363636363636363, 0.005879038879660156)

p値が0.005ということになりました。

同様に

10, 10, 10,  8,  8, 14

というデータであればp値は0.95311546950018988となりました。

検定の結果としては両方共Rで実施した場合と等しくなっています。

Rでこれと同じ数字を出すためには

> m = matrix(c(10,10,10,10,10,10, 10,10,10,25,1,4),ncol=6, byrow=T)
> m
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]   10   10   10   10   10   10
[2,]   10   10   10   25    1    4
> chisq.test(m)

        Pearson's Chi-squared test

data:  m
X-squared = 16.3636, df = 5, p-value = 0.005879

このようにしないといけなかったのですね。

うどん、そば、ラーメンのケースでは

>>> scipy.stats.chi2_contingency(np.array([[1,7,3],[13,6,10]]))[0:2]
(7.5634710117468744, 0.022783116860954487)

となりRと結果が異なっています。これはR側で計算値が不正確、というメッセージのとおりだからかもしれません。