python - 为什么 scipy.ststs.contingency.expected_freq 返回的预期频率不是我所期望的?

标签 python pandas scipy contingency

我有一个数据框,我想计算它的卡方和 p 值。但是,当我打印出预期值时,它们并不是我所期望的。我期望代码测试的原假设是 Q7 不依赖于“ConcernImprovement”,因此我预计每个 Q7 条目的减少、增加和无变化的“预期频率”是相同的

这是我观察到的数据框,称为LikelihoodConcern:

ConcernImprovement  Decrease  Increase  No change
Q7                                               
Likely                   2.0      18.0       21.0
Not likely at all        0.0       2.0        1.0
Not very likely          3.0      11.0        5.0
Somewhat likely          4.0      24.0       14.0
Very likely              1.0      16.0        8.0

我尝试了这段代码:

from scipy.stats import chi2_contingency
chi2, p, dof, expected = chi2_contingency(LikelihoodConcern, correction=False)
expected

它返回预期频率:

array([[ 3.15384615, 22.39230769, 15.45384615],
       [ 0.23076923,  1.63846154,  1.13076923],
       [ 1.46153846, 10.37692308,  7.16153846],
       [ 3.23076923, 22.93846154, 15.83076923],
       [ 1.92307692, 13.65384615,  9.42307692]])

我预计它会返回:

array([[ 13.67777777, 13.67777777, 13.67777777],
       [ 1.00000000,  1.00000000,  1.00000000],
       [ 6.33333333, 6.33333333,  6.33333333],
       [ 14.00000000, 14.00000000, 14.00000000],
       [ 8.33333333, 8.33333333,  8.33333333]])

我已经查看了 expected_freq 函数的源代码,因为文档没有太多细节 - 但我仍然不明白为什么我没有看到我期望的内容

最佳答案

我在那里进行了测试,输入数据与您相同:

array([[ 2., 18., 21.],
   [ 0.,  2.,  1.],
   [ 3., 11.,  5.],
   [ 4., 24., 14.],
   [ 1., 16.,  8.]])

并得到了与预期频率相同的结果。如果我们查看第一个单元格(“可能”行,“减少”列)。 “可能”的边际总和为 42,“减少”的边际总和为 10。表的边际总和为 130。因此,对于第一个单元格,我们的预期值为:

(10 * 41) / 130 = 3.1538461538461537

对于右下角的单元格(“非常有可能”行,“无变化”列),我们有:

(49 * 25) / 130 = 9.423076923076923

等等。这些与 stats.scipy 的结果相匹配。

关于python - 为什么 scipy.ststs.contingency.expected_freq 返回的预期频率不是我所期望的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57658325/

相关文章:

python - 检查一个列表中的项目是否存在于另一列表中

Python 从当前文件循环

python - 从字典创建 Pandas DataFrame

python - 从 pandas 数据框中获取多个最小和最大日期

python - 符号数组表达式

python - 使用 NumPy 进行快速插值

创建集合的 Python 性能比较 - set() 与 {} 文字

python - django 中的 slug 上的 404

python - 无法使用 scipy 读取 MAT 文件

python - 如何在 Windows 上使用 iPython Notebook 解决 pandas 的导入错误?