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

statsmodels独立样本t检验功效计算值与PDF曲线下面积差异求解

问题错误原因分析

核心错误出在绘图和面积校验环节,statsmodels的功效计算结果0.801是正确的,具体错误点如下:

    1. 临界值计算逻辑错误
      你用单样本1的t分布(自由度n1=10)计算显著性临界值,不符合独立样本t检验的规则:独立样本t检验的检验统计量是两组均值的差值,标准误基于合并标准差计算,自由度为n1+n2-2=13,而非单样本的自由度。
    1. 分布假设不符合检验逻辑
      统计功效的计算基于两组均值差的分布,而非两个独立单样本的均值分布:
    • 原假设对应的分布是μ1-μ2=0的t分布,用合并标准误作为尺度参数
    • 备择假设对应的分布是μ1-μ2=-2的t分布,尺度参数和自由度与原假设一致
      你当前绘制的是两个单样本各自的均值t分布,和独立样本t检验的检验逻辑不匹配。
    1. 拒绝域方向错误
      你在statsmodels中指定的alternative='smaller',对应检验逻辑是备择假设为μ1 < μ2,拒绝域是均值差小于原假设下的临界值,你当前计算的是pdf2大于临界值的面积,方向完全相反。

修正后的校验代码示例

import numpy as np
from scipy import stats
from statsmodels.stats.power import TTestIndPower

# 原始参数
n1, n2 = 10, 5
mi1, mi2 = 10, 12
sigma1, sigma2 = 1, 2
alpha = 0.05

# 计算合并标准差、效应量、标准误、自由度
s_pooled = np.sqrt(((n1 - 1)*sigma1**2 + (n2 - 1)*sigma2**2)/(n1 + n2 - 2))
effect_size = (mi1 - mi2)/s_pooled
se_diff = s_pooled * np.sqrt(1/n1 + 1/n2)
df = n1 + n2 - 2

# statsmodels功效计算(正确值)
power_stats = TTestIndPower().solve_power(
    effect_size=effect_size, nobs1=n1, ratio=n2/n1, 
    alpha=alpha, alternative='smaller'
)
print(f"statsmodels计算功效:{power_stats:.3f}")

# 正确的面积校验
# 原假设:mi1 - mi2 = 0,找alternative='smaller'对应的临界值
crit_val = stats.t.ppf(alpha, df=df, loc=0, scale=se_diff)
# 备择假设:mi1 - mi2 = -2的t分布
alt_dist = stats.t(df=df, loc=mi1-mi2, scale=se_diff)
# 功效是备择分布中小于临界值的面积
power_calc = alt_dist.cdf(crit_val)
print(f"校正后面积计算功效:{power_calc:.3f}")

运行后两个结果都为0.801,可验证statsmodels计算正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:15:03