You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python随机抛硬币模拟中t检验p值分布不符合均匀性?

问题根源:样本不独立,而非伪随机数缺陷

你的实验结果异常,和Python的Mersenne Twister伪随机数生成器无关,核心问题是你用于检验的两组样本(heads和tails)完全不独立,违反了t检验、卡方检验等方法的基本假设。

具体分析

  • 样本关联性:heads是一组0/1随机数,tails是1-x的转换结果,两组数据完全负相关——每一个heads的取值直接决定了tails对应位置的取值,没有任何独立随机性可言。
  • t检验的错误应用:stats.ttest_ind是独立样本t检验,要求两组样本相互独立。但你的两组样本是同一数据的镜像转换,独立性假设完全不成立,导致检验统计量的分布偏离理论预期,p值自然不会服从均匀分布。
  • 卡方/G检验的同理问题:如果你用同样的heads和tails做卡方或G检验(比如构建2×2列联表),同样违反了检验对样本独立性的要求,得到的p值分布异常也是同样原因。

修正实验的正确方式

要验证原假设下p值的均匀分布,应该生成两组独立的伯努利样本,示例代码如下:

import random
from scipy import stats
from matplotlib import pyplot as plt

ps = []
for i in range(5000):
    # 生成两组独立的无偏硬币样本
    group1 = [random.randint(0,1) for _ in range(20000)]
    group2 = [random.randint(0,1) for _ in range(20000)]
    p = stats.ttest_ind(group1, group2).pvalue
    ps.append(p)
plt.hist(ps, 100)
plt.show()

这样两组样本独立,符合t检验的假设,p值会趋近于均匀分布。如果要检验单组样本的比例是否为0.5,应该使用单样本检验(比如单样本t检验、二项检验),而非独立样本检验。

内容的提问来源于stack exchange,提问作者Niek Tax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:25:22