首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与SPSS结果不同的枕骨中的X平方

与SPSS结果不同的枕骨中的X平方
EN

Stack Overflow用户
提问于 2017-12-20 19:28:46
回答 1查看 602关注 0票数 2

我在尝试自动进行七平方运算。我在用scipy.stats.pearsonr。然而,这给了我与SPSS不同的答案。比如,10个因子的差异。(.07 -> .8)

我很确定这两种情况下的数据是相同的,因为我在两种情况下都打印交叉表(使用pandas.crosstab),而且数字是相同的。

代码语言:javascript
复制
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)

给予:

代码语言:javascript
复制
 (-0.065191159985573108, 0.61172152831874682)

(第一个是系数,第二个是p值)

然而,SPSS表示,培生智广场是.057。

除了交叉表之外,还有什么需要我检查的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-20 19:58:17

显然,您正在计算数据的应变表(即“交叉选项卡”)的x-平方统计量和p值。this函数pearsonr不是用于此的正确函数。要使用use进行计算,您需要形成应急表,然后使用scipy.stats.chi2_contingency

有几种方法可以将d1d2转换为应急表。在这里,我将使用Pandas函数pandas.crosstab。然后我将使用chi2_contingency进行x-平方测试。

首先,这是您的数据。我把它们放在numpy数组中,但这不是必要的:

代码语言:javascript
复制
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])

使用熊猫组成应急表:

代码语言:javascript
复制
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进行x-平方测试:

代码语言:javascript
复制
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 1.7.0 (目标为2021年中期)中,您将能够使用scipy.stats.contingency.crosstab创建应急表

代码语言:javascript
复制
In [33]: from scipy.stats.contingency import crosstab  # Will be in SciPy 1.7.0 
In [34]: d1                                                                                                 
Out[34]: 
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 [35]: d2                                                                                              
Out[35]: 
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 [36]: (vals1, vals2), table = crosstab(d1, d2)                                                                          

In [37]: vals1                                                                                                      
Out[37]: array([0, 1])

In [38]: vals2                                                                                              
Out[38]: array([0, 1, 2])

In [39]: table                                                                                           
Out[39]: 
array([[ 5,  7,  4],
       [10, 34,  3]])
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47913123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档