0

我正在比较两个分布,例如:

group1 = [ 0, 0, 0, 1, 11, 11, 13, 12]

group2 = [ 0, 0, 0, 0, 5, 11, 18, 14]

我的分布没有很多元素,我不确定卡方是否是最好的方法,但从我读到的内容来看,我认为它仍然是我见过的最好的测试。

问题是,无论我尝试哪种卡方,我都会得到不同的结果:

所以如果我使用:

import numpy as np

import scipy.stats.mstats as mst
mst.chisquare(np.array(group1), np.array(group2))

答案将是:(8.874603174603175, 0.26178489290758555)

如果我使用:

import scipy.stats as stat
stat.chisquare(np.array(group1), np.array(group2))

我会得到:(nan, nan)

如果我删除两个组中所有为 0 的元素,以便我的组现在看起来像这样:

group1 = [ 1, 11, 11, 13, 12]

group2 = [ 0, 5, 11, 18, 14]

使用:

mst.chisquare(np.array(group1), np.array(group2))

会给我:(8.874603174603175, 0.06431137995249224)

我对这种模棱两可感到很困惑。我的分布的真实 p 值是多少?

4

1 回答 1

1

我猜这是scipy.stats.mstats模块中的一个错误。mstats应该比 . 更好地处理屏蔽数组(具有无效值的数组)stats。然而,在这种情况下,它似乎没有正确计算自由度 (DOF) 的数量:卡方统计量(的第一个返回值chisquare)在去除零之前和之后是相同的,因此只有自由度可以改变。

请注意,在两个数组中删除 0 后,您仍然会得到无穷大,因为要计算卡方统计量,您必须除以频率group2group2在您的数组中,请参阅Wikipedia)。mstat删除这些无效值,但它不会相应地调整自由度(因为元素较少,自由度应该因元素的差异而减少)。

我希望它能澄清一点。请考虑向 scipy 讨论列表发送错误报告。

于 2012-12-17T14:18:45.087 回答