ttest_1samp 给出的 P_value 错误

Posted

技术标签:

【中文标题】ttest_1samp 给出的 P_value 错误【英文标题】:Wrong P_value given by ttest_1samp 【发布时间】:2020-08-01 13:05:20 【问题描述】:

这是一个单样本 t 检验示例:

from scipy.stats import ttest_1samp
import numpy as np

ages = [32., 34., 29., 29., 22., 39., 38., 37.,38, 36, 30, 26, 22, 22.]
ages_mean = np.mean(ages)
ages_std = np.std(ages, ddof=1)
print(ages_mean)
print(ages_std)
ttest, pval = ttest_1samp(ages, 30)
print("ttest: ", ttest)
print("p_value: ", pval)
#31.0
#6.2634470725607025
#ttest:  0.5973799001456603
#p_value:  0.5605155888171379

# check analytically:
my_ttest = (ages_mean - 30.0)/(ages_std/np.sqrt(len(ages)))
print(t)
#0.5973799001456603

检查 p_value

根据定义p_value = P(t>=0.59) = 1 - P(t<=.59). 使用 Z 表,我们得到了p_value = 1 - 0.7224 = 0.2776 # 0.56!!!

【问题讨论】:

【参考方案1】:

如果您检查 ttest_1samp 的小插图,它会写道:

所以它是一个双边 p 值,意味着获得比这更极端的绝对 t 统计量的概率总和。

t 分布是对称的,所以我们可以取 -abs(t stat) 并乘以 2 进行 2 边检验,p 值为:

from scipy.stats import t
2*t.cdf(-0.5973799001456603, 13)
0.5605155888171379

您的导出值对于单边 t 检验是正确的 :)

【讨论】:

以上是关于ttest_1samp 给出的 P_value 错误的主要内容,如果未能解决你的问题,请参考以下文章

Scipy t-test统计中的一个样本?

python计算两组数据的P值

matlab中,ttest2函数用来检验两组数据是用来确定两个都来自于同一分布呢还是同一正态分布?

stats.chisquare 错误地返回 p_value = 0

r语言 多元回归后怎样提取方程的p_value

使用 AbstractTransactionalSpringContextTests(回滚)时未捕获具有约束检查错误的测试