Python从t统计量中获取p值

46
我有一些t值和自由度,想从中找出它们的p值(这是双尾的)。在现实世界中,我会使用统计学教科书背面的t检验表;那么我该如何在Python中做同样的事情?例如:`t-lookup(5, 7) = 0.00245` 或类似的内容。
我知道在SciPy中,如果我有数组,我可以使用`scipy.stats.ttest_ind`,但我没有。我只有t统计量和自由度。

很可能统计表格是为了方便而存在的,而不是必须从一个方程式中计算这些值。既然这是一个计算机程序,为什么不直接使用那个方程式呢? - dilbert
2
这很复杂。我希望在某个库中有一些方法可以为我完成它。 - Andrew Latham
2个回答

51

http://docs.scipy.org/doc/scipy/reference/tutorial/stats.html

作为一项练习,我们也可以直接计算t检验,而不使用提供的函数,这应该给我们相同的答案,确实如此:

tt = (sm-m)/np.sqrt(sv/float(n))  # t-statistic for mean
pval = stats.t.sf(np.abs(tt), n-1)*2  # two-sided pvalue = Prob(abs(t)>tt)
print 't-statistic = %6.3f pvalue = %6.4f' % (tt, pval)
t-statistic =  0.391 pvalue = 0.6955

为什么他们称其为(stats.t.sf)生存函数?它实际上是否与https://en.wikipedia.org/wiki/Survival_function相同? - wordsforthewise
如果这是单侧检验呢? - zthomas.nc
回答的后续:单侧 t 检验的 p 值是双侧 t 检验的 p 值除以 2:pval_one_sided = stats.t.sf(np.abs(tt), n-1) - PavelLes
教程的正确链接已更改。现在是: https://docs.scipy.org/doc/scipy/tutorial/stats.html - undefined

7

我们也可以使用 t.cdf() 函数进行计算:

from scipy.stats import t
t_stat = 2.25
dof = 15
# p-value for 2-sided test
2*(1 - t.cdf(abs(t_stat), dof))
# 0.03988800677091664
2*(t.cdf(-abs(t_stat), dof))
# 0.03988800677091648

下图展示了在双侧t检验中,5%显著性水平的临界区域。对于上述例子,我们可以看到零假设被拒绝。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接