如何结合Python与统计公式计算总体均值置信值 验证95%置信区间覆盖率
基于现有代码的置信区间覆盖率验证实现
- 首先修正个小细节:你当前写的
std_dev = np.std (s, axis=1)默认用ddof=0计算有偏的样本标准差,因为单组样本量仅25属于小样本,构造置信区间得用无偏估计,修改为std_dev = np.std(s, axis=1, ddof=1)才能匹配统计公式的要求,不然算出来的区间会偏窄,影响结果准确性。 - 确定95%置信区间的临界值:当使用样本标准差代替总体标准差构造区间时,需要用t分布计算双侧临界值。针对25个样本的分组,自由度为
25-1=24,对应95%置信水平的临界值固定为2.0639,不需要逐组重复计算。 - 逐组计算区间边界:按照置信区间公式,每组的上下界为
样本均值 ± 临界值 * (样本标准差 / sqrt(25))。 - 覆盖性判断:对每一组生成的置信区间,检查是否满足
区间下界 ≤ 真实总体均值mu=0 ≤ 区间上界,满足则记为覆盖成功。 - 统计结果:将所有覆盖成功的组数求和后除以总组数10万,得到实际覆盖率,验证其是否接近95%的理论值。
可直接运行的完整代码
import numpy as np from scipy import stats # 基础参数(对应你已写的逻辑) mu, sigma = 0, 1 n_total_group = 100000 n_per_group = 25 # 生成模拟数据集 s = np.random.normal(mu, sigma, size=[n_total_group, n_per_group]) # 逐组计算统计量 m = np.mean(s, axis=1) std_dev = np.std(s, axis=1, ddof=1) # 修正ddof参数,计算无偏样本标准差 # 计算95%置信水平对应的t分布临界值 df = n_per_group - 1 t_critical = stats.t.ppf(q=0.975, df=df) # 逐组计算置信区间上下界 margin_of_error = t_critical * std_dev / np.sqrt(n_per_group) ci_lower = m - margin_of_error ci_upper = m + margin_of_error # 统计覆盖率 cover_success = np.sum((ci_lower <= mu) & (ci_upper >= mu)) cover_rate = cover_success / n_total_group print(f"实际95%置信区间覆盖率:{cover_rate:.2%}")
注:运行得到的覆盖率会在95%附近存在小幅随机波动(通常在94.5%~95.5%区间),属于抽样过程的正常误差,完全符合置信区间的统计规律。如果课程要求使用已知总体sigma的z临界值(即1.96)构造区间,只需把代码中获取t_critical的部分替换为t_critical = stats.norm.ppf(q=0.975)即可,对应结果同样会趋近95%。
内容的提问来源于stack exchange,提问作者Jeanny
相关产品推荐
相关产品推荐

