【问题标题】:Where is the mistake in coding permutation test in python?python中编码排列测试的错误在哪里?
【发布时间】:2014-10-08 15:02:58
【问题描述】:

我正在使用 Python 3.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 脚本中......)

感谢您的建议!

【问题讨论】:

  • @xfer 你能告诉我真正的差异在哪里吗?显示你想要的输出。
  • 据我所见,Python 打印输出低于=98.41%,高于=1.59%。根据我还链接的文件,它应该是 2.38%。

标签: python python-3.x statistics permutation itertools


【解决方案1】:

您遇到的问题在于&lt;=。在您链接的文档中,如果 t >= 1.98,他们会将其添加到 over,因此仅当值 t sum(perm) < Tobs 时才应将其添加到 under。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2016-08-16
    • 2021-02-07
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多