当前位置:首页>python>统计学入门合集(基于Python)5——假设检验(Hypothesis Testing)

统计学入门合集(基于Python)5——假设检验(Hypothesis Testing)

  • 2026-09-07 22:28:29
统计学入门合集(基于Python)5——假设检验(Hypothesis Testing)

在前几节中,我们已经建立了:

  • 描述统计(数据特征)
  • 中心极限定理(分布基础)
  • 参数估计(点估计 + 区间估计)

现在进入统计推断的核心问题:

如何基于样本,对一个“假设”做出决策?


1问题提出

设:

  • 原假设(Null Hypothesis):
  • 备择假设(Alternative Hypothesis):

例如:


👉 问题:

样本数据是否支持拒绝 ?


2决策视角

假设检验本质是一个二元决策问题:

真实情况
决策:接受 
决策:拒绝 
 为真
正确
Type I Error
 为假
Type II Error
正确

两类错误

  • 第一类错误(Type I):错杀(false positive)
  • 第二类错误(Type II):漏检(false negative)

👉 关键:

我们只能控制 Type I Error


3显著性水平(α)

定义:

拒绝为真

常用:

  • 0.05
  • 0.01

👉 工程理解:

α 是“误判风险预算”


4检验统计量(Test Statistic)

基于 CLT:


当 σ 未知:


5拒绝域(Reject Region)

双侧检验:


👉 含义:

如果观测值“过于极端”,则拒绝 


6Python验证

# file: hypothesis_test_basic.pyimport numpy as npfrom scipy import statsdefmain():    np.random.seed(0)    data = np.random.normal(10.5, 2, 30)    mu0 = 10    x_bar = np.mean(data)    s = np.std(data, ddof=1)    t_stat = (x_bar - mu0) / (s / np.sqrt(len(data)))    p_value = 2 * (1 - stats.t.cdf(abs(t_stat), df=29))    print("t统计量:", t_stat)    print("p-value:", p_value)if p_value < 0.05:        print("拒绝 H0")else:        print("不能拒绝 H0")if __name__ == "__main__":    main()

结果解释

执行结果如下:
  • p-value 小 → 数据与  不一致
  • p-value 大 → 数据不足以反对 

7p-value 的本质

定义:

观测值或更极端

❌ 常见误解:

  • “p 是假设为真的概率”(错误)

✅ 正确理解:

p-value 衡量的是数据在  下的“罕见程度”


8可视化理解

# file: hypothesis_visualization.pyimport numpy as npimport matplotlib.pyplot as pltfrom scipy.stats import normdefmain():    x = np.linspace(-4,4,200)    y = norm.pdf(x)    z_obs = 2    plt.plot(x, y)    plt.fill_between(x, y, where=(x >= z_obs), alpha=0.3)    plt.fill_between(x, y, where=(x <= -z_obs), alpha=0.3)    plt.title("Rejection Region")    plt.show()if __name__ == "__main__":    main()

执行结果如下:

9仿真:错误率验证

# file: type1_error_simulation.pyimport numpy as npdefmain():    np.random.seed(0)    mu0 = 10    sigma = 2    n = 30    alpha = 0.05    count = 0    N_sim = 5000for _ in range(N_sim):        data = np.random.normal(mu0, sigma, n)        x_bar = np.mean(data)        z = (x_bar - mu0) / (sigma / np.sqrt(n))if abs(z) > 1.96:            count += 1    print("Type I error:", count / N_sim)if __name__ == "__main__":    main()

结果解释

执行结果如下:
  • 输出 ≈ 0.05
  • 验证显著性水平定义

10检验功效(Power)

定义:

拒绝为真

👉 影响因素:

  • 样本量 n
  • 方差 σ
  • 偏差大小

# file: power_analysis.pyimport numpy as npdefmain():    np.random.seed(0)    mu_true = 10.5    mu0 = 10    sigma = 2    n = 30    count = 0for _ in range(5000):        data = np.random.normal(mu_true, sigma, n)        x_bar = np.mean(data)        z = (x_bar - mu0) / (sigma / np.sqrt(n))if abs(z) > 1.96:            count += 1    print("Power:", count / 5000)if __name__ == "__main__":    main()

执行结果如下:

11工程意义

假设检验用于:

  • A/B测试
  • 医学试验
  • 工程质量控制
  • 风险决策

12本节总结

内容
含义
H0/H1
假设框架
α
错误控制
p-value
数据证据
Power
检测能力

13下期预告

下一讲:

  • 线性回归
  • 最小二乘法
  • 统计解释

📌 点赞 + 转发,持续更新《统计学入门》

最新文章

随机文章