为什么scipy.ststs.contractional.expected\u freq返回的预期频率不是我期望的频率?

2024-06-28 14:25:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是我观察到的数据帧,叫做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函数的源代码,因为文档中没有太多细节-但是我仍然不明白为什么我没有看到我所期望的


Tags: 数据代码目的notarray频率expected期望值
1条回答
网友
1楼 · 发布于 2024-06-28 14:25:34

我在那里做了一个测试,输入的数据和你的一样:

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的结果相匹配

相关问题 更多 >