R
観測値 (たとえば、20、20、0、0) が期待値/比率 (たとえば、4 つのケースのそれぞれで 25%) にどの程度適合するかを判断するために、次のコードを使用しました。
> chisq.test(c(20,20,0,0), p=c(0.25, 0.25, 0.25, 0.25))
Chi-squared test for given probabilities
data: c(20, 20, 0, 0)
X-squared = 40, df = 3, p-value = 1.066e-08
chisquare
これを Python で再現するにはどうすればよいでしょうか。の関数を使用してみましたscipy
が、得られた結果は非常に異なっていました。これが使用すべき正しい関数であるかどうかさえわかりません。scipy
ドキュメントを検索しましたが、1000 ページ以上に及ぶため、非常に困難です。numpy
ドキュメントはそれのほぼ 50% を超えています。
ベストアンサー1
scipy.stats.chisquare
観測された頻度と期待される頻度の絶対値を求めており、比率を求めているわけではありません。
>>> observed = np.array([20., 20., 0., 0.])
>>> expected = np.array([.25, .25, .25, .25]) * np.sum(observed)
>>> chisquare(observed, expected)
(40.0, 1.065509033425585e-08)
期待値がクラス全体に均一に分布している場合は、期待値の計算を省略できます。
>>> chisquare(observed)
(40.0, 1.065509033425585e-08)
最初に返される値はχ²統計量であり、2番目はp-テストの値。