我有简单的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检验背后的数学知识不是很了解,但是我不知道这个结果如何正确。有人有什么想法吗?
答案 0 :(得分:1)
我使用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,它的p值也会小很多。