使用Python Scipy验证t检验结果

时间:2018-10-03 14:36:38

标签: python scipy statistics

我有简单的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检验背后的数学知识不是很了解,但是我不知道这个结果如何正确。有人有什么想法吗?

1 个答案:

答案 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值也会小很多。