2017-12-20 17 views
2

私はカイ2乗計算を自動化しようとしています。私はscipy.stats.pearsonrを使用しています。しかし、これは私にSPSSとは異なる答えを与えています。同様に、10の差の要因。 (.07 - > .8)SPSSの結果と異なるscipyでカイ二乗

両方のケースで(pandas.crosstabを使用して)クロスタブを印刷しているので、数字が同じであるため、両方のデータが同じであることは間違いありません。

d1 = [1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1] 

d2 = [1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 2, 1, 0, 1, 1, 2, 0, 2, 1, 2, 0, 0, 1] 

print scipy.stats.stats.pearsonr(d1,d2) 

が与える:

(-0.065191159985573108, 0.61172152831874682) 

(第一の係数であり、第二は、p値である)

をしかし、SPSSは、ピアソンカイ二乗は0.057であることを述べています。

クロス集計以外のチェックが必要なことはありますか?

+1

対応するSPSSコードも表示できますか? –

+0

他の誰かがSPSSを作ったので、簡単に出力にアクセスできます... –

答えて

5

明らかに、データのコンティンジェンシーテーブル(つまり「クロスタブ」)のカイ2乗統計量とp値を計算しています。 scipy関数pearsonrは、これに使用する正しい関数ではありません。 scipyで計算を行うには、contingencyテーブルを作成してからscipy.stats.chi2_contingencyを使用する必要があります。

d1d2をコンティンジェンシーテーブルに変換するにはいくつかの方法があります。ここでは、パンダの機能pandas.crosstabを使用します。次に、χ2乗検定にはchi2_contingencyを使用します。

まずはあなたのデータです。私はnumpyの配列でそれらを持っているが、これは必要ありません。

In [49]: d1 
Out[49]: 
array([1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 
     1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 
     1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1]) 

In [50]: d2 
Out[50]: 
array([1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 
     1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 
     1, 1, 0, 1, 2, 1, 0, 1, 1, 2, 0, 2, 1, 2, 0, 0, 1]) 

使用パンダ分割表を形成する:

In [51]: import pandas as pd 

In [52]: table = pd.crosstab(d1, d2) 

In [53]: table 
Out[53]: 
col_0 0 1 2 
row_0   
0  5 7 4 
1  10 34 3 

そして、カイ二乗検定のためのchi2_contingencyを使用します。

In [54]: from scipy.stats import chi2_contingency 

In [55]: chi2, p, dof, expected = chi2_contingency(table.values) 

In [56]: p 
Out[56]: 0.057230732412525138 

p値はSPSSによって計算された値と一致します。

関連する問題