python - t 检验中 p 值的意外分布
问题描述
我取了两个样本,每个样本由来自相同标准正态分布的 100K 观察值组成,并检验了它们的均值相同的零假设。我重复了这个实验 5K 次,并在直方图中绘制了 p 值。
根据我的直觉,这两个样本足够大,并且是从相同的分布(相同的均值和标准差)中采样的。因此,我希望 t 检验会产生相对较高的 p 值(拒绝原假设)。但是,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 值。
有人能告诉我我的想法的缺陷吗?你能复制这个吗?
解决方案
所以我预计,t 检验会产生相对较高的 p 值,或者倾向于高 p 值。
你的期望是不正确的。您的输入满足 t 检验的“零假设”:它们来自具有相同均值的总体。通常,当执行假设检验(例如 t 检验)并且输入满足原假设时,p 值的分布在区间 [0, 1] 上是均匀的。所以你的情节是你重复测试的预期结果。
推荐阅读
- android - 膨胀第二个导航主机时应用程序崩溃
- angular - Angular - 在 ngFor 中使用时,日期管道不会更新值
- c# - LDAP 连接到 AD 并在所有 OU 中搜索所有用户
- python - 对 Numpy 数组求和
- powershell - 无法在 Powershell 中使用 send-MailMessage 连接到服务器
- batch-file - 如果我们使用 ctrl+c 中途取消测试,如何返回上一个时区
- javascript - 量角器 - 查找所有元素和找到的元素的循环长度并单击按钮
- java - 如何用起始文本绘制弧线
- javascript - 上传一个文件时未定义 Req.files.file.length
- grep - grep 命令查看有限的文本