为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Python scipy 验证 t 检验结果

使用 Python scipy 验证 t 检验结果

慕仙森 2021-07-01 15:20:35
我有简单的 Python 函数:from scipy.stats import ttest_1sampdef tTest( expectedMean, sampleSet, alpha=0.05 ):    # T-value and P-value    tv, pv = ttest_1samp(sampleSet, expectedMean)    print(tv,pv)    return pv >= alphaif __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 检验背后的数学不是很了解,但我不明白这个结果怎么可能是正确的。有没有人有任何想法?
查看完整描述

1 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

我使用 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.3018

alternative hypothesis: true mean is not equal to 10

95 percent confidence interval:

-829.9978 2498.3055

sample 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。


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信