我正在比较两个发行版,例如:
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值是多少?
答案 0 :(得分:1)
我想这是scipy.stats.mstats
模块中的一个错误。 mstats
应该处理比stats
更好的掩码数组(具有无效值的数组)。然而,似乎在这种情况下它没有正确计算自由度数(DOF):卡方统计量(chisquare
的第一个返回值)在删除零之前和之后是相同的,所以只有DOF可以改变。
请注意,在删除两个数组中的0之后,您仍然会获得无穷大,因为要计算卡方统计数据,您必须除以数组group2
(group2
中的频率,请参阅{{3 }})。 mstat
删除了这些无效值,但它不会相应地调整DOF(因为元素的差异应该减少dof应该减少。)
我希望它能澄清一下。请考虑向scipy讨论列表发送错误报告。