使用 Python scipy 验证 t 检验结果

我有简单的 Python 函数:


from scipy.stats import ttest_1samp


def tTest( expectedMean, sampleSet, alpha=0.05 ):

    # T-value and P-value

    tv, pv = ttest_1samp(sampleSet, expectedMean)

    print(tv,pv)

    return pv >= alpha


if __name__ == '__main__':

    # Expected mean is 10

    print tTest(10.0, [99, 99, 22, 77, 99, 55, 44, 33, 20, 9999, 99, 99, 99])

我的期望是该样本的 t 检验应该失败,因为它远不及预期的总体平均值 10。但是,程序产生的结果是:


(1.0790344826428238, 0.3017839504736506)

True

即 p 值为 ~30%,这太高而无法拒绝假设。我对 t 检验背后的数学不是很了解,但我不明白这个结果怎么可能是正确的。有没有人有任何想法?


慕仙森
浏览 136回答 1
1回答

慕工程0101907

我使用 R 执行测试只是为了检查结果是否相同,它们是:t.test(x=c(99, 99, 22, 77, 99, 55, 44, 33, 20, 9999, 99, 99, 99), alternative = "two.sided", mu = 10, paired = FALSE, var.equal = FALSE, conf.level = 0.95)data:  c(99, 99, 22, 77, 99, 55, 44, 33, 20, 9999, 99, 99, 99)t = 1.079, df = 12, p-value = 0.3018alternative hypothesis: true mean is not equal to 1095 percent confidence interval:-829.9978 2498.3055sample estimates:mean of x  834.1538 您可以看到 p 值为 0.3。这是一个非常有趣的问题,我对假设检验有很多问题。首先,样本量影响很大,如果你的样本量很大,比如说 5000 个值,与您正在测试的预期值的微小偏差会对 p 值产生很大影响,因此您将拒绝原假设大多数情况下,小样本会起到相反的作用。这里发生的事情是你的数据有很大的差异。如果您尝试从 [99, 99, 22, 77, 99, 55, 44, 33, 20, 9999, 99, 99, 99]至 [99, 99, 99, 99, 100, 99, 99, 99, 99, 100, 99, 100, 100]所以它有一个非常小的方差,你的 p 值会小很多,即使这个的平均值可能接近 10。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python