我正在使用python3.4.1并尝试用itertools重建置换测试。
在here上找到的流行代码是:
from itertools import combinations as comb
def permutationTest(a, b):
ab = a + b
Tobs = sum(a)
under = 0
for count, perm in enumerate(comb(ab, len(a)), 1):
if sum(perm) <= Tobs:
under += 1
return under * 100. / count
treatmentGroup = [9.1, 10.3, 11.0, 11.5, 11.9]
controlGroup = [8.1, 8.4, 9.2, 9.4]
under = permutationTest(treatmentGroup, controlGroup)
averageTreatment = sum(treatmentGroup) / float(len(treatmentGroup))
averageControl = sum(controlGroup) / float(len(controlGroup))
print("under=%.2f%%, over=%.2f%%" % (under, 100. - under))
print ('The average of threatment group is', averageTreatment)
print ('The average of control group is', averageControl)
如你所见,这两个组(治疗组和对照组)和往常一样被定义。我还举了一个例子,从我在here找到的一所大学。我现在的问题是:正如你所见,结果是不同的。
有人知道错误在哪里吗?(我猜是在Python脚本中…)
谢谢你的建议!
您的问题在于
<=
。在您链接的文档中,如果t>;=1.98,则将其添加到over,因此仅当值t<;1.98或sum(perm) < Tobs
时才将其添加到under。在相关问题 更多 >
编程相关推荐