从假设检验到哑变量回归

Linguistics

均值差检验

独立两样本 t 检验预设两个正态总体是相互独立的。即,已知 σ12=σ22\displaystyle{ \sigma _{ 1 } ^{ 2 } = \sigma _{ 2 } ^{ 2 } },判断 H0:μ1=μ2\displaystyle{ H _{ 0 } : \mu _{ 1 } = \mu _{ 2 } }.

我们的想法是,设法研究样本平均值的差 xy\displaystyle{ \overline{ x } - \overline{ y } } 的分布,当此差超过了 μ1=μ2\displaystyle{ \mu _{ 1 } = \mu _{ 2 } } 时随机变化的正常范围时,否定 H0\displaystyle{ H _{ 0 } }.

H0:μ1=μ2\displaystyle{ H _{ 0 } : \mu _{ 1 } = \mu _{ 2 } } 的条件下,构造检验统计量

T=XY(μ1μ2)(1n1+1n2)σ^2 =XY(1n1+1n2)σ^2t(2n2)\displaystyle{ \begin{aligned}T & = \frac{ \overline{ X } - \overline{ Y } - \left( \mu _{ 1 } - \mu _{ 2 } \right) }{ \sqrt{ \left( \frac{ 1 }{ n _{ 1 } } + \frac{ 1 }{ n _{ 2 } } \right) \hat{ \sigma } ^{ 2 } } } \ & = \frac{ \overline{ X } - \overline{ Y } }{ \sqrt{ \left( \frac{ 1 }{ n _{ 1 } } + \frac{ 1 }{ n _{ 2 } } \right) \hat{ \sigma } ^{ 2 } } } \sim t \left( 2 n - 2 \right)\end{aligned} }

其中的方差 σ2\displaystyle{ \sigma ^{ 2 } } 使用合并方差估计

σ^2把俩样本合成一个样本,算方差\displaystyle{ \hat{ \sigma } ^{ 2 } \coloneqq \text{把俩样本合成一个样本,算方差} }

为了找到一个区间使得 P(T>λ)=α\displaystyle{ P \left( \left| T \right| > \lambda \right) = \alpha },查 t(2n2)\displaystyle{ t \left( 2 n - 2 \right) } 分布临界值表得到

λqt(2n2,1α2)\displaystyle{ \lambda \coloneqq \text{qt} \left( 2 n - 2 , 1 - \frac{ \alpha }{ 2 } \right) }

判断 T\displaystyle{ \left| T \right| }λ\displaystyle{ \lambda } 的大小关系,从而判断 H0\displaystyle{ H _{ 0 } } 是否成立,也就是两个总体的平均数无(有)显著(性)差异。


有些实际问题中的数据是成对的,比如同一个人两次测量同一指标。这时,两个变量 X 和 Y 一般是不独立的,不能使用上述的独立两样本 t 检验。

配对两样本 t 检验方法考虑新的总体 Z=XY\displaystyle{ Z = X − Y },样本为 Zi=XiYi\displaystyle{ Z _{ i } = X _{ i } − Y _{ i } }

  • 如果 (X,Y)\displaystyle{ \left( X , Y \right) } 服从联合正态分布,则 Z\displaystyle{ Z } 也服从正态分布
  • 要检验 H0:E(X)=E(Y)\displaystyle{ H _{ 0 } : E \left( X \right) = E \left( Y \right) },只要检验等价的假设 E(Z)=0\displaystyle{ E \left( Z \right) = 0 }
  • 问题化为单样本 t 检验问题

方差分析

概率统计课程讲授的内容就到此为止了。在社会科学的定量方法中,常用的检验方法是方差分析 ANOVA 方法。

单因素 ANOVA

对于多组别间差异显著性的比较,如果采用两两进行 t 检验的方式,会导致整体假阳率 FPR 显著高于单组 p 值。此时应当采用方差分析 (ANOVA)的方法。

Question

已知 σ12=σ22==σn2\displaystyle{ \sigma _{ 1 } ^{ 2 } = \sigma _{ 2 } ^{ 2 } = \ldots = \sigma ^{ 2 } _{ n } },判断 H0:μ1=μ2==μn\displaystyle{ H _{ 0 } : \mu _{ 1 } = \mu _{ 2 } = \ldots = \mu _{ n } }.

方差分析将总方差(总变异)拆解为组内变异 (SSW) 和组间变异 (SSB)。组内变异可以是个体差异性,视为随机波动。我们在意的是组间变异相比于组内变异是否显著。

SSTotal=SSBetween+SSWithinSS_{Total} = SS_{Between} + SS_{Within}

其中 SSTotal=(yijyˉ..)2SS_{Total} = \sum \sum (y_{ij} - \bar{y}_{..})^2SSBetween=nj(yˉj.yˉ..)2SS_{Between} = \sum n_j (\bar{y}_{j.} - \bar{y}_{..})^2SSWithin=(yijyˉj.)2SS_{Within} = \sum \sum (y_{ij} - \bar{y}_{j.})^2

在零假设 H0:\displaystyle{ H _{ 0 } : } 各组均值相同的情况下,构造检验统计量

F=MSbetweenMSwithin=SSbdfb/SSwdfwF(dfb,dfw)\displaystyle{ F = \frac{ M S _{ bet w e en } }{ M S _{ wi th i n } } = \frac{ S S _{ b } }{ d f _{ b } } {/} \frac{ S S _{ w } }{ d f _{ w } } \sim F \left( d f _{ b } , d f _{ w } \right) }

其中 MS 表示均方,即平方和经过自由度 df 归一化后的结果。自由度 df 定义为数据中可以自由变化的独立观测值的个数。

dfb=ni1,dfw=dfb=Nk\displaystyle{ d f _{ b } = n _{ i } - 1 , \quad d f _{ w } = \sum d f _{ b } = N - k }

判断 F\displaystyle{ F } 与 1 的大小关系落入何概率区间即可。

注意

这只能说明这个自变量对于总体均值是否有影响,不能说明具体是自变量的何种取值对总体均值有影响。

多因素 ANOVA

以上是针对单个自变量、多种取值得到多组别结果之间显著性的检验。

在许多情境下,某现象并非仅受单一因子的影响,甚至存在另一个因子的效应,例如要比较五个都市的空气污染总指针差异,除了都市别的因素之外,还必须考量汽机车密度的因素,在这样的情境下,都市别与汽机车密度可能就存在着某种效应影响着空气污染的多寡,因此在双因子方差分析中,除了考量双因子彼此的效应之外,也可能存在因子之间的联合效应,也就是因子间的交互作用(interaction),这也使得双因子方差分析变的比较复杂。

对于多个自变量,在控制整体 FPR 的情况下,探究是哪些自变量对于均值有影响(「贡献」),需要用到多因素 ANOVA.

以双因子为例。双因子方差分析也能将总变异量分解成双因子的主效应、双因子的联合效应与组内变异。

“Common Statistical Tests Are Linear Models”

这种说法打开了看待二者关系的新视角,但与其实质相比,显得有些骇人听闻了。实际上是,对于特定形式的线性回归模型,最小二乘法可以将模型系数构造为各组之间的均值差。而检验系数的过程与普通假设检验的过程仍然是一致的。只是用线性回归模型统一了诸如 t-test,anova 等的假设检验方法于一体。


具体而言,对于不同组别之间差异显著性的各种常见统计检验方法,可以看做一个 0-1 变量(哑变量)线性回归模型,及对其回归系数 β^\displaystyle{ \hat{ \beta } } 的检验。

y=β0+β1x1+β2x2++βnxn+ε=Xβ+ε\displaystyle{ y = \beta _{ 0 } + \beta _{ 1 } x _{ 1 } + \beta _{ 2 } x _{ 2 } + \ldots + \beta _{ n } x _{ n } + \varepsilon = X \beta + \varepsilon }

如果要比较 k\displaystyle{ k } 组数据的组间差异,则需要 (k1)\displaystyle{ \left( k - 1 \right) } 元及以上哑变量线性回归模型。其中,x1,,k1{0,1}\displaystyle{ x _{ 1 , \ldots , k - 1 } \in \left\lbrace 0 , 1 \right\rbrace }

使用哑变量,是为了确保预测值 y^\displaystyle{ \hat{ y } } 始终是该组的样本均值。在连续变量回归中,回归线为了照顾所有的点,往往无法穿过每一个点的均值。但在哑变量回归中,回归线虽然数学上画出来是直线,但我们只关心 0 和 1 这两个点,它不需要照顾中间的取值,因此它可以精准地“踩”在每一组的均值中心。

通过使用哑变量,我们让模型在 (x1,,xk1)=0\displaystyle{ \left( x _{ 1 } , \ldots , x _{ k - 1 } \right) = 0 } 时的预测值 y^\displaystyle{ \hat{ y } } 代表第 0 组的取值,在 xi=1\displaystyle{ x _{ i } = 1 } 时的预测值 y^\displaystyle{ \hat{ y } } 代表第 i\displaystyle{ i } 组的取值。这样,模型的预测值 y^\displaystyle{ \hat{ y } } 就永远与该组的样本均值相同了,也就使得模型系数的预测值 β^i\displaystyle{ \hat{ \beta } _{ i } } 能够反映不同组别之间的均值差,从而对于系数预测值的显著性检验即等价于均值差检验,也就是实现了 t 检验方法的效果。

用上面的办法,我们就得以将线性模型及其系数的检验,与均值差检验统一起来了。所以,零假设是

H0:μ0==μk1    β1==βk1=0\displaystyle{ H _{ 0 } : \mu _{ 0 } = \ldots = \mu _{ k - 1 } \iff \beta _{ 1 } = \ldots = \beta _{ k - 1 } = 0 }

要检验这个假设,我们关注以下两个检验:

F 检验(联合显著性检验/模型线性相关性检验)

F=SSR/kSSE/(nk1)F(k,nk1)\displaystyle{ F = \frac{ \text{SSR} {/} k }{ \text{SSE} {/} \left( n - k - 1 \right) } \sim F \left( k , n - k - 1 \right) }

这其实检验的是线性相关性是否显著。其中 SSR 是回归平方和,SSE 是残差平方和。这与单因素 ANOVA 的 MS_between / MS_within 在数学上一致。

回顾

因变量总偏差平方和

lyy=(YiY)2=(YiYi^)2残差平方和Q=ϵ^2+(Yi^Y)2回归平方和U=b^2lxx\displaystyle{ \begin{aligned}l _{ y y } & = \sum \left( Y _{ i } - \overline{ Y } \right) ^{ 2 } = \underbrace{ \sum \left( Y _{ i } - \hat{ Y _{ i } } \right) ^{ 2 } } _{ \text{残差平方和} Q = \sum \hat{ \epsilon } ^{ 2 } } + \underbrace{ \sum \left( \hat{ Y _{ i } } - \overline{ Y } \right) ^{ 2 } } _{ \text{回归平方和} U = \hat{ b } ^{ 2 } l _{ x x } }\end{aligned} }

如果 F 检验显著,则说明组间有差异,即这个自变量对因变量有显著影响。但不知道具体是自变量的哪个取值对因变量有显著影响。这需要逐一对回归系数进行 t 检验。

回归系数的 t 检验

线性模型回归系数的检验的意义是,系数越显著,模型的解释力越强,预报区间就越窄(预报越精确)。

在哑变量编码下,经过最小二乘法拟合得到的模型回归系数 βi^(i1)\displaystyle{ \hat{ \beta _{ i } } \left( i \geqslant 1 \right) } 反映了 μiμ0\displaystyle{ \mu _{ i } - \mu _{ 0 } } 的差值。对系数进行 t 检验,可以判断是哪些自变量的取值会导致因变量显著变化。

t=β^0SE(β^0)T(2n2)\displaystyle{ t = \frac{ \hat{ \beta } _{ 0 } }{ S E \left( \hat{ \beta } _{ 0 } \right) } \sim T \left( 2 n - 2 \right) }

其中 SE 是标准误 (standard error),定义为

SE(β^)=Var(β^)\displaystyle{ S E \left( \hat{ \beta } \right) = \sqrt{ V ar \left( \hat{ \beta } \right) } }

与标准差的区别是:标准差描写的是原始数据点的离散程度,而标准误描写的是估计值的不确定性。


线性混合模型

我们已经发现了 t 检验、ANOVA 检验的本质是一个哑变量线性回归模型

y=Xβ+ε\displaystyle{ y = X \beta + \varepsilon }

其中,我们对残差项 ε\displaystyle{ \varepsilon } 有严格的假设:

  • E(ε)=0\displaystyle{ \mathbb{ E } \left( \varepsilon \right) = 0 }
  • 独立同分布:εN(0,σ2I)\displaystyle{ \varepsilon \sim N \left( 0 , \sigma ^{ 2 } I \right) },这意味着方差-协方差矩阵 V\displaystyle{ V } 是一个单位矩阵的倍数。其中,对角线相等代表方差齐性(每个观测的变异程度一样),非对角线为 0 代表独立性(观测值之间没有相关性)。
V=Var(ϵ)=[σ200σ2]V = Var(\epsilon) = \begin{bmatrix} \sigma^2 & 0 & \cdots \\ 0 & \sigma^2 & \cdots \\ \vdots & \vdots & \ddots \end{bmatrix}

但在实际研究中,数据往往存在嵌套或重复测量(比如,同一名学生在不同时间的成绩),导致残差之间存在相关性。为了捕获这种相关性,我们引入随机效应项 Zb\displaystyle{ Z b }

y=Xβ+Zb+ε\displaystyle{ y = X \beta + Z b + \varepsilon }

随机截距模型

在随机截距模型中,Z\displaystyle{ Z } 矩阵也和 X\displaystyle{ X } 矩阵一样是一个 One-hot 矩阵,作用是指明每一个观测值属于哪一个随机效应的水平。b\displaystyle{ b } 是一个随机截距列向量。

比如说,有一些观测值来自学校 1,有一些观测值来自学校 2。那么,来自 1 地的观测值都会在固定效应后加上一个随机截距 b1\displaystyle{ b _{ 1 } },来自 2 地的观测值都会加上一个随机截距 b2\displaystyle{ b _{ 2 } }

# y: 成绩, x: 学习时间, School: 学校ID
model <- lmer(y ~ x + (1 | School), data = df)

随机截距模型中 b\displaystyle{ b } 是怎么算的?

随机斜率模型

假设你要研究“学习时间” (Hours) 对“考试成绩” (Score) 的影响,且你认为不同学校的学生不仅起点不同(截距),进步速度也不同(斜率)。

# (1 + Hours | School) 表示截距和 Hours 的斜率都随 School 随机变化
model <- lmer(Score ~ Hours + (1 + Hours | School), data = df)
# 或者, `1 +` 可以省略
model <- lmer(Score ~ Hours + (Hours | School), data = df)

需要注意的是,随机斜率模型对数据量要求较高。如果每个分组里只有一两个观测点,模型往往会因“过度拟合”而无法收敛。

斜率-截距无关模型

有时候会看到这种写法:

lmer(Score ~ Hours + (Hours || School), data = df)

它等价于 (1 | School) + (0 + Hours | School)。它强制截距和斜率之间的相关性为 0。当模型太复杂无法收敛(Singular fit)时,通常会尝试这种写法来简化模型。

Reference

Common statistical tests are linear models (or: how to teach stats), https://lindeloev.github.io/tests-as-linear/#1_the_simplicity_underlying_common_tests

链接已复制到剪贴板