全文共 2915 字,10 幅图,
预计阅读时间 8 分钟。
本文是「小孩都看得懂」系列的第十篇,本系列的特点是极少公式,没有代码,只有图画,只有故事。内容不长,碎片时间完全可以看完,但我背后付出的心血却不少。喜欢就好!
- 小孩都看得懂的神经网络
- 小孩都看得懂的推荐系统
- 小孩都看得懂的逐步提升
- 小孩都看得懂的聚类
- 小孩都看得懂的主成分分析
- 小孩都看得懂的循环神经网络
- 小孩都看得懂的 Embedding
- 小孩都看得懂的熵、交叉熵和 KL 散度
- 小孩都看得懂的 p-value
- 小孩都看得懂的假设检验
0
假设 检验
字面上看,假设检验(hypothesis testing)由“假设”和“检验”组成。假设是基于总体参数,而检验在样本上完成。
举个调查中国成年男性平均身高的例子,全国的成年男性就是总体,每个成年男性是个体。有时候普查所有成年男性金钱花费和时间成本太高,通常我们会抽取若干成年男性作为样本,而计算样本里的成年男性平均身高作为总体里的所有成年男性平均身高的推断。
现在来检验以下这个问题:
根据 2010 年的统计,中国所有成年男性平均身高为 1.72 米,在 2020 年他们是否平均长高了?
1
HO HA
要检验某种观点(还不知真伪),需要创建两个互相排斥的假设,它们是:
- 无效假设(null hypothesis),用 H0 表示,因为下标 0 长得像字母 o,因此可发音为 HO。
- 备择假设(alternative hypothesis),用 HA 表示,发音为 HA。
HO 通常是常见且无聊的假设,而 HA 是罕见带惊喜的假设。
根据上述问题,我们列出 HOHA:
H0: 平均身高等于 1.72 米
HA: 平均身高大于 1.72 米
定义 μ 为总体成年男性的平均身高,用数学符号表示 HOHA:
H0: μ = 1.72
HA: μ > 1.72
这时我们只关心是否变高,二不关心是否变矮,这是单边检验。
注意在写 HOHA 时,里面出现的数学符号一定要是总体参数(比如例子里的 μ,它是未知的),千万不要写成样本统计
(惯例上喜欢在符号上面带把儿代表统计量)。试想,你都能找个样本而计算出其精准统计量那还假设检验个啥?
2
Null 模型
写完 HOHA 后,我们假设 HO 是对的,还记得上贴 p-value 的定义吗?p-value 就是假设 HO 为真时观测结果发生的概率。
现在就围绕 HO 为真时来创建模型,称为 Null 模型。
回到上例,当认为 HO 为真,即认为成年男性平均身高 1.72 米,开始做试验,即随机收集若干组样本,求每组的平均身高,这个叫做样本均值(sample mean),如图所示:
第一组随机采样并计算样本均值为 1.73,和总体均值 1.72 蛮近。
第二组随机采样并计算样本均值为 1.9(可能采到了姚明),远大于总体均值 1.72。
第三组随机采样并计算样本均值为 1.68(可能采到了潘长江),小于总体均值 1.72。
但其实姚明和潘长江这种身高不多,大多数还是在 1.72 左右的。
根据中心极限定理(central limit theorem),只要你是随机的取样,只要选择样本的组数足够大,那么样本均值(采样了很多组,因此样本均值是个随机变量)服从以 μ = 1.72 为均值的正态分布。因此按照上面做随机采样很多次计算样本均值,可以画出类似下面的图。
Null 模型本质就是一个概率模型,在本例中是正态分布,均值为 1.72,标准差为 0.1(N 个样本均值算出来后,可以进一步计算样本标准差,我知道符号不严谨,现在先不管这个),我们得到:
- 1.72 加减 1 个标准差得到的身高是 1.62 和 1.82, 68.2% 的身高落在 [1.62, 1.82]
- 1.72 加减 2 个标准差得到的身高是 1.52 和 1.92, 95.4% 的身高落在 [1.52, 1.92]
- 1.72 加减 3 个标准差得到的身高是 1.42 和 2.02, 99.7% 的身高落在 [1.42, 2.02]
3
随机采样 计算均值
有了 Null 模型,再回顾一下 HOHA:
H0: μ = 1.72
HA: μ > 1.72
现在只需随机采样,即随机测量几百个人的身高并计算平均值,事先设定搞笑阈值(显著性水平)为 5%,对应的身高值是 1.92,那么
- 如果计算出来的样本均值大于 1.92,HO 就搞笑了哦,拒绝 HO 接受 HA
- 如果计算出来的样本均值小于 1.92,无法觉得 HO 搞笑,无法拒绝它
如果上述要检验的问题改为:
根据 2010 年的统计,中国所有成年男性平均身高为 1.72 米,在 2020 年他们是否平均降低了?
那么 HOHA 变成
H0: μ = 1.72
HA: μ < 1.72
参考的是下图:
如果上述要检验的问题改为:
根据 2010 年的统计,中国所有成年男性平均身高为 1.72 米,在 2020 年他们平均身高是否变了?
那么 HOHA 变成
H0: μ = 1.72
HA: μ ≠ 1.72
参考的是下图:
是否用单边(左/右)或双边检验完全根据问题导向,读懂问题之后列出 HOHA,创建 Null 模型,计算统计量(加查表)就完事了。
总结
假设检验大体分三步:
- 写出 HOHA,记住
- H0 是你需要假设的。
- HA 是你想要证明的。
- 建立 Null 模型,即认为“无效假设”为真的时候的概率模型。
- 计算统计量
培优时间到了:
对那些喜欢抽象的孩子
在本例中,我们想检验的是,总体均值 μ 是否大于一个给定值(1.72)。我们用的 Null 模型是正态模型,如果样本中的数据不够,Null 模型是学生 t 模型。
此外还可以做各个各样的假设检验。
HO | Null 模型 |
---|---|
两变量的均值相等 | student-t |
两样本方差相等 | chi-square |
多样本方差相等 | F |
多随机变量不相关 | beta |
做什么样的检验要看具体的问题,核心思路还是先列出 HOHA(HO 是无聊假设,HA 是惊喜假设),再建 Null 模型(就是各种概率分布模型),计算统计量再和搞笑阈值对应的值相比,看是否拒绝 HO。
对那些喜欢哲学的孩子
帮他们提高一些格调。索罗斯在他的反身性(reflexivity)论文中提到他老师波普说的一段话。
The empirical truth cannot be known with absolute certainty. Even scientific laws can’t be verified beyond a shadow of a doubt: they can only be falsified by testing. One failed test is enough to falsify, but no amount of conforming instances is sufficient to verify. Popper
意思就是,无论多少经验和归纳出来的规律相符,我们都无法证明该规律是正确的。一次失败的实验就能证伪,但再多的实验都不能证实。
塔勒布也举过黑天鹅的例子。
无论我们看见过多少只白天鹅,哪怕是上亿只,也不能证明所有的天鹅都是白色的,但是只用看到一只黑天鹅就能证明不是所有天鹅都是白色的。
对那些喜欢编程的孩子
用 scipy 工具包的 stats 可以做假设检验。
代码语言:javascript复制from scipy import stats
Null 模型 | stats 中的函数 |
---|---|
总体均值等于给定值 | ttest_1samp |
两变量均值相等 | ttest_indttest_rel |
两样本方差相等 | chi2_contingency |
多样本方差相等 | barlettlevene |
多变量总体均值相等 | f_onewaykruskal |
多变量不相关 | pearsonrspearmanr |
Stay Tuned!