为什么 scipy.ststs.contingency.expected_freq 返回的预期频率不是我所期望的?
Why aren't the expected frequencies returned by scipy.ststs.contingency.expected_freq what I expect?
我有一个数据框,我想为其计算卡方和 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
return这是预期的频率:
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]])
我预计会 return:
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.]])
并得到与预期频率相同的结果。如果我们查看第一个单元格(行 'Likely',列 'Decrease')。 'Likely' 的边际和为 42,'Decrease' 为 10。table 的边际和为 130。因此,对于第一个单元格,我们的期望值为:
(10 * 41) / 130 = 3.1538461538461537
对于右下角的单元格(行 'Verly likely',列 'No change'),我们有:
(49 * 25) / 130 = 9.423076923076923
等这些与 stats.scipy
.
的结果相匹配
我有一个数据框,我想为其计算卡方和 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
return这是预期的频率:
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]])
我预计会 return:
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.]])
并得到与预期频率相同的结果。如果我们查看第一个单元格(行 'Likely',列 'Decrease')。 'Likely' 的边际和为 42,'Decrease' 为 10。table 的边际和为 130。因此,对于第一个单元格,我们的期望值为:
(10 * 41) / 130 = 3.1538461538461537
对于右下角的单元格(行 'Verly likely',列 'No change'),我们有:
(49 * 25) / 130 = 9.423076923076923
等这些与 stats.scipy
.