在Python中从t分布和自由度计算双尾p值

10 投票
1 回答
17096 浏览
提问于 2025-04-18 07:39

我该如何确定一个t分布的P值,给定n个自由度呢?

关于这个问题的研究让我找到了这个Stack Exchange的回答:https://stackoverflow.com/a/17604216

我猜np.abs(tt)是T值,但我该如何使用自由度呢?是n-1吗?

提前谢谢你!

1 个回答

14

是的,在这个例子中,n-1就是自由度。

给定一个t值和自由度,你可以使用“生存函数”sf,这是来自scipy.stats.t的一个功能(也叫做补充的累积分布函数)来计算单边的p值。第一个参数是T值,第二个参数是自由度。

比如,这个页面上的表格的第一项显示,对于1个自由度,p=0.1时的临界T值是3.078。你可以用t.sf来验证这一点:

In [7]: from scipy.stats import t

In [8]: t.sf(3.078, 1)
Out[8]: 0.09999038172554342   # Approximately 0.1, as expected.

对于双边p值,只需将单边p值乘以2即可。

撰写回答