Python中的scipy.stats.mstats.chisquare和scipy.stats.mstats之间的区别

时间:2012-12-17 11:46:37

标签: python numpy

我正在比较两个发行版,例如:

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值是多少?

1 个答案:

答案 0 :(得分:1)

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

请注意,在删除两个数组中的0之后,您仍然会获得无穷大,因为要计算卡方统计数据,您必须除以数组group2group2中的频率,请参阅{{3 }})。 mstat删除了这些无效值,但它不会相应地调整DOF(因为元素的差异应该减少dof应该减少。)

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