首页 > 解决方案 > t 检验中 p 值的意外分布

问题描述

我取了两个样本,每个样本由来自相同标准正态分布的 100K 观察值组成,并检验了它们的均值相同的零假设。我重复了这个实验 5K 次,并在直方图中绘制了 p 值。

根据我的直觉,这两个样本足够大,并且是从相同的分布(相同的均值和标准差)中采样的。因此,我希望 t 检验会产生相对较高的 p 值(拒绝原假设)。但是,p 值似乎是均匀分布的。

在 n=100000、mu=0、sig=1 的两个随机生成的正态分布上进行 5000 次 t 检验的 p 值直方图

这是我用来创建此图的代码(我使用的是 numpy 1.19.2,scipy 1.4.1):

from scipy import stats
import numpy as np

ps = []
for i in range(5000):
    gaussian_numbers = np.random.normal(0, 1, size=100000)
    gaussian_numbers2 = np.random.normal(0, 1, size=100000)
    t, p = stats.ttest_ind(gaussian_numbers, gaussian_numbers2, equal_var=True)
    ps.append(p)
plt.hist(ps, 100)

如您所见,我在整个值范围 [0, 1] 中得到了或多或少均匀分布的 p 值。

有人能告诉我我的想法的缺陷吗?你能复制这个吗?

标签: pythonnumpyscipystatistics

解决方案


所以我预计,t 检验会产生相对较高的 p 值,或者倾向于高 p 值。

你的期望是不正确的。您的输入满足 t 检验的“零假设”:它们来自具有相同均值的总体。通常,当执行假设检验(例如 t 检验)并且输入满足原假设时,p 值的分布在区间 [0, 1] 上是均匀的。所以你的情节是你重复测试的预期结果。


推荐阅读