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

两样本非劣效检验样本量计算及检验未检出差异的疑问

问题分析:非劣效性检验未检测到预期差异的原因

核心问题

需验证测试组安装率至少达到对照组的70%,通过statsmodels计算得出每组需约15000样本。实际观测中测试组安装率为对照组的85%,但z检验未检测到显著差异。

原样本量计算代码

alpha = 0.1  
power = 0.80
p_A = 0.0056    # 对照组安装率

effect_size = sms.proportion_effectsize(p_A, p_A * 0.7)  # 对照组的70%作为基准

# 计算单组样本量(单侧非劣效性检验)
sample_size = sms.NormalIndPower().solve_power(
    effect_size, 
    power=power, 
    alpha=alpha, 
    ratio=1, 
    alternative='larger'  # 检验方向:测试组率 >= 对照组的70%
)

原检验代码的关键错误

  1. 篡改对照组观测数据:代码中x_control = p_control * n_control * 0.7这一行错误地将对照组实际安装数替换为理论界值,完全违背了非劣效性检验的逻辑——我们需要对比的是测试组实际率与对照组实际率的70%,而非修改对照组样本数据。
  2. alpha值不一致:样本量计算使用的显著性水平是alpha=0.1,但检验时却改用alpha=0.05,更严格的检验标准直接导致更难拒绝原假设。

修正后的检验代码

import statsmodels.stats.api as sms

# 实际观测数据
x_test = 80          # 测试组安装数
n_test = 15015       # 测试组样本量
x_control = 101      # 对照组安装数
n_control = 15015    # 对照组样本量

# 计算对照组实际安装率
p_control = x_control / n_control
# 非劣效界值:对照组实际率的70%
non_inferiority_bound = p_control * 0.7

# 单样本比例z检验:对比测试组率与非劣效界值
stat, p_value = sms.proportions_ztest(
    count=x_test, 
    nobs=n_test, 
    value=non_inferiority_bound, 
    alternative='larger'
)

# 保持与样本量计算一致的alpha值
alpha = 0.1
print(f"Z统计量: {stat:.4f}, P值: {p_value:.4f}")

if p_value < alpha:
    print("拒绝原假设:测试组安装率显著不低于对照组的70%")
else:
    print("无法拒绝原假设:没有足够证据证明测试组安装率达到对照组的70%")

补充说明

  • alpha一致性:样本量计算与检验必须使用相同的显著性水平,否则样本量的计算逻辑将失效。
  • 低比例场景的检验选择:安装率属于极低比例(<1%),正态近似的z检验精度有限,可考虑使用scipy.stats.binom_test进行精确检验,提升结果可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:15:56