2017-08-03 8 views
2

私は、コンティンジェンシーテーブルを使用して、PythonでChiの二乗値を計算しようとしています。ここに例があります。Python:Chi 2テストで間違った結果が生成される(chi2_contingency)

+--------+------+------+ 
|  | Cat1 | Cat2 | 
+--------+------+------+ 
| Group1 | 80 | 120 | 
| Group2 | 420 | 380 | 
+--------+------+------+ 

期待値は次のとおりです。私は手でカイ二乗値を計算する場合

+--------+------+------+ 
|  | Cat1 | Cat2 | 
+--------+------+------+ 
| Group1 | 100 | 100 | 
| Group2 | 400 | 400 | 
+--------+------+------+ 

は、私は、Pythonで10を得るが、私は9.506を取得します。

import numpy as np 
import pandas as pd 
from scipy.stats import chi2_contingency 
import scipy 

# Some fake data. 
n = 5 # Number of samples. 
d = 3 # Dimensionality. 
c = 2 # Number of categories. 
data = np.random.randint(c, size=(n, d)) 
data = pd.DataFrame(data, columns=['CAT1', 'CAT2', 'CAT3']) 

# Contingency table. 
contingency = pd.crosstab(data['CAT1'], data['CAT2']) 

contingency.iloc[0][0]=80 
contingency.iloc[0][1]=120 
contingency.iloc[1][0]=420 
contingency.iloc[1][1]=380 

# Chi-square test of independence. 
chi, p, dof, expected = chi2_contingency(contingency) 

機能は私に正しい期待値を与えること奇妙であるが、しかし、カイ二乗とp値はオフになっている: 私は、次のコードを使用します。私はここで間違って何をしていますか?

ありがとう

p.s.

パンダで初期のテーブルを作成するのはかなり難解ですが、私はパンダでこれらのネストしたテーブルを作成する方法についての専門家ではありません。ドキュメントから

答えて

3

:自由

correction : bool, optional 
If True, and the degrees of freedom is 1, apply Yates’ correction for continuity. 
The effect of the correction is to adjust each observed value by 0.5 towards 
the corresponding expected value. 

そして度は1です。あなたがFalseに補正を設定すると、あなたは10

chi2_contingency(contingency, correction=False) 
>>> (10.0, 0.001565402258002549, 1, array([[ 100., 100.], 
    [ 400., 400.]])) 
+1

を得るだろうクイックヘルプをありがとうございました。 6分で正確にマークされます! – valenzio

関連する問題