p 值

Python 假设检验

James Chapman

Curriculum Manager, DataCamp

刑事审判

  • 两种可能的真实状态:
    1. 被告犯了罪
    2. 被告未犯罪
  • 两种可能的裁决:
    1. 有罪
    2. 无罪
  • 初始假定被告无罪
  • 公诉方须提供"排除合理怀疑"的证据才能判有罪
Python 假设检验

首次编程年龄

  • age_first_code_cut 标注 Stack Overflow 用户首次编程的时间
    • "adult" 表示 14 岁或以上开始
    • "child" 表示 14 岁之前开始
  • 以往研究:35% 的软件开发者在童年开始编程
  • 是否有证据表明数据科学家中这一比例更高?
Python 假设检验

定义

假设 是关于未知总体参数的陈述

假设检验 比较两个相互竞争的假设

  • 原假设($H_{0}$) 是现有观点

  • 备择假设($H_{A}$) 是研究者提出的新"挑战者"观点

针对本问题:

  • $H_{0}$:作为儿童开始编程的数据科学家比例为 35%
  • $H_{A}$:作为儿童开始编程的数据科学家比例大于 35%
1 "Naught" 是英式英语中"零"的意思。出于历史原因,"H-naught" 是原假设的国际惯用读法。
Python 假设检验

刑事审判 vs. 假设检验

  • $H_{A}$ 与 $H_{0}$ 二者必居其一(不可同时为真)
  • 初始假定 $H_{0}$ 为真
  • 检验结论为"拒绝 $H_{0}$"或"未能拒绝 $H_{0}$"
  • 若样本证据"显著"支持 $H_{A}$,则拒绝 $H_{0}$;否则选择 $H_{0}$

显著性水平 是假设检验中的"排除合理怀疑"标准

Python 假设检验

单尾与双尾检验

标准正态分布密度图,左右尾部以红色高亮。

假设检验检查样本统计量是否落在原假设分布的尾部

测验 尾部
备择假设 与原假设不同 双尾
备择假设 大于 原假设 右尾
备择假设 小于 原假设 左尾

 

$H_{A}$:作为儿童开始编程的数据科学家比例大于35%

这是一个右尾检验

Python 假设检验

p 值

p 值:在原假设为真时,得到该结果的概率

  • p 值大,对 $H_{0}$ 的支持大
    • 统计量很可能不在原假设分布的尾部
  • p 值小,对 $H_{0}$ 的反证强
    • 统计量很可能原假设分布的尾部
  • p 中的 "p" → 概率
  • "小" 意味着 "接近 0"
Python 假设检验

计算 z 分数

prop_child_samp = (stack_overflow['age_first_code_cut'] == "child").mean()
0.39141972578505085
prop_child_hyp = 0.35
std_error = np.std(first_code_boot_distn, ddof=1)
0.010351057228878566
z_score = (prop_child_samp - prop_child_hyp) / std_error
4.001497129152506
Python 假设检验

计算 p 值

  • norm.cdf()scipy.stats 的正态分布 CDF。
  • 左尾检验 → 用 norm.cdf()
  • 右尾检验 → 用 1 - norm.cdf()

 

from scipy.stats import norm
1 - norm.cdf(z_score, loc=0, scale=1)
3.1471479512323874e-05
Python 假设检验

开始练习吧!

Python 假设检验

Preparing Video For Download...