在scipy中,chi与SPSS中的结果不同

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在scipy中,chi与SPSS中的结果不同相关的知识,希望对你有一定的参考价值。

我正在尝试自动化卡方计算。我正在使用scipy.stats.pearsonr。然而,这给我的答案不同于SPSS。比如,10个因素的差异。 (.07 - > .8)

我很确定这两种情况下的数据是相同的,因为我在两种情况下打印出交叉表(使用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)

(第1个是系数,第2个是p值)

然而,SPSS称Pearson Chi-Square是.057。

除了交叉表之外,我还应该检查一下吗?

答案

显然,您正在计算数据的列联表(即“交叉表”)的卡方统计量和p值。 scipy函数pearsonr不是用于此的正确函数。要使用scipy进行计算,您需要形成列联表,然后使用scipy.stats.chi2_contingency

有几种方法可以将d1d2转换为列联表。在这里,我将使用熊猫功能pandas.crosstab。然后我将使用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])

使用pandas来形成列联表:

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计算的值匹配。

以上是关于在scipy中,chi与SPSS中的结果不同的主要内容,如果未能解决你的问题,请参考以下文章

SPSS Chi-Square

显示 Kruskal-Wallis 测试等级

为啥不使用 Scipy 的 FFT 代码中的结果与 Scipy FFT 不相似?

如何用spss做卡方检验时计算OR值?

请教高手如何在SPSS上做趋势卡方检验

SPSS实战应用案例50篇:从SPSS的角度讲清楚卡方检验