本系列文章基于R语言中lm函数的输出,介绍线性回归模型的例子和原理。
本文是系列文章的第一篇,将介绍线性回归模型的定义并给出一个R语言的示例。
线性回归模型是我们日常工作中处理数据时经常使用的一种基础模型。了解线性回归模型的原理和细节有助于我们学习其他模型,如广义线性模型(GLM模型)。
本文包括以下四个小节:
1. 定义
2. 示例:mtcars数据集
3. 模型推导
4. 附录代码
以下文章为免费试读部分,完整文章可到 公号“生信了”付费阅读
1. 定义
假设我们观察到一些数据 { x i , y i } i = 1 n \{\mathbf{x}_i, y_i\}_{i=1}^n {xi,yi}i=1n,其中 x i = ( x i 1 , x i 2 , … , x i p ) T \mathbf{x}_i=(x_{i1},x_{i2},\ldots,x_{ip})^\mathsf{T} xi=(xi1,xi2,…,xip)T,线性回归模型研究因变量 y i y_i yi和自变量 x i \mathbf{x}_i xi之间的关系:
y i = β 0 + β 1 x i 1 + β 2 x i 2 + ⋯ + β p x i p + ϵ i = ∑ j = 0 p β j x i j + ϵ i , ( x i 0 = 1 ) \begin{align*} y_i &= \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2} + \cdots + \beta_p x_{ip} + \epsilon_i \\ &= \sum_{j=0}^p \beta_j x_{ij} + \epsilon_i, \qquad (x_{i0} = 1) \tag{1.1} \end{align*} yi=β0+β1xi1+β2xi2+⋯+βpxip+ϵi=j=0∑pβjxij+ϵi,(xi0=1)(1.1)
其中 β j \beta_j βj是回归系数,是我们要求解的模型参数;而 ϵ i \epsilon_i ϵi是误差项,代表观测值 y i y_i yi与理论值 ∑ j = 0 p β j x i j \sum_{j=0}^p \beta_j x_{ij} ∑j=0pβjxij之间的偏差。这里我们需要注意的是线性回归模型中的“线性”是针对回归系数而言的,也就是说模型可以泛化为:
y i = β 0 + β 1 ϕ 1 ( x i 1 ) + β 2 ϕ 2 ( x i 2 ) + ⋯ + β p ϕ p ( x i p ) + ϵ i = ∑ j = 0 p β j ϕ j ( x i j ) + ϵ i , ( ϕ 0 ( x i 0 ) = 1 ) \begin{align*} y_i &= \beta_0 + \beta_1 \phi_1(x_{i1}) + \beta_2 \phi_2(x_{i2}) + \cdots + \beta_p \phi_p(x_{ip}) + \epsilon_i \\ &= \sum_{j=0}^p \beta_j \phi_j(x_{ij}) + \epsilon_i, \qquad (\phi_0(x_{i0}) = 1) \tag{1.2} \end{align*} yi=β0+β1ϕ1(xi1)+β2ϕ2(xi2)+⋯+βpϕp(xip)+ϵi=j=0∑pβjϕj(xij)+ϵi,(ϕ0(xi0)=1)(1.2)
其中 ϕ j ( ⋅ ) \phi_j(\cdot) ϕj(⋅)可以是“非线性”函数(比如二次函数)。
我们希望模型的“拟合值”尽可能接近观测值。有多个指标可以用来衡量这个“接近”的程度,其中最常用的就是误差项的平方,也就是 ϵ i 2 \epsilon_i^2 ϵi2。在此指标下,最优的模型应该是让所有观测数据的误差项平方的和最小,也就是让“损失” L L L最小化:
L = ∑ i = 1 n ϵ i 2 = ∑ i = 1 n ( y i − ∑ j = 0 p β j x i j ) 2 \begin{align*} L &= \sum_{i=1}^n \epsilon_i^2 \\ &= \sum_{i=1}^n \left(y_i - \sum_{j=0}^p \beta_j x_{ij} \right)^2 \tag{1.3} \end{align*} L=i=1∑nϵi2=i=1∑n(yi−j=0∑pβjxij)2(1.3)
我们可以用矩阵形式来重新描述上面的式子(注意到 L L L是 β j \beta_j βj的函数):
L = S ( β ) = ∥ y − X β ∥ 2 \begin{align*} L = S(\boldsymbol{\beta}) = \| \mathbf{y} - \mathbf{X}\boldsymbol{\beta} \|^2 \tag{1.4} \end{align*} L=S(β)=∥y−Xβ∥2(1.4)
其中 y = ( y 1 , y 2 , … , y n ) T \mathbf{y}=(y_1, y_2, \ldots, y_n)^\mathsf{T} y=(y1,y2,…,yn)T, β = ( β 0 , β 1 , … , β p ) T \boldsymbol{\beta}=(\beta_0, \beta_1, \ldots, \beta_p)^\mathsf{T} β=(β0,β1,…,βp)T,而 X \mathbf{X} X稍微复杂一点,
X = ( 1 x 11 x 12 ⋯ x 1 p 1 x 21 x 22 ⋯ x 2 p ⋮ ⋮ ⋮ ⋱ ⋮ 1 x n 1 x n 2 ⋯ x n p ) \begin{equation} \mathbf{X} = \begin{pmatrix} 1 & x_{11} & x_{12} & \cdots & x_{1p} \\ 1 & x_{21} & x_{22} & \cdots & x_{2p} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & x_{n2} & \cdots & x_{np} \end{pmatrix} \tag{1.5} \end{equation} X= 11⋮1x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1px2p⋮xnp (1.5)
此时,我们要求解的模型最优参数(用 β ^ \hat{\boldsymbol{\beta}} β^表示)就是:
β ^ = arg min β ∥ y − X β ∥ 2 \begin{align*} \hat{\boldsymbol{\beta}} &= \arg \min_{\boldsymbol{\beta}} \| \mathbf{y} - \mathbf{X}\boldsymbol{\beta} \|^2 \tag{1.6} \end{align*} β^=argβmin∥y−Xβ∥2(1.6)
我们可以比较容易地得到 β ^ \hat{\boldsymbol{\beta}} β^的解析解,
β ^ = ( X T X ) − 1 X T y \begin{equation} \hat{\boldsymbol{\beta}} = (\mathbf{X}^\mathsf{T} \mathbf{X})^{-1} \mathbf{X}^\mathsf{T} \mathbf{y} \tag{1.7} \end{equation} β^=(XTX)−1XTy(1.7)
具体的推导过程见“模型推导”小节。上面这种根据最小误差平方和求解模型参数的方法称为普通最小二乘法(OLS),是最小二乘法中最常见的一种(其它包括加权最小二乘等)。
下文首先给出一个R语言中线性回归模型的例子,然后介绍其背后的原理。
2. 示例:mtcars数据集
很多人都了解,我们可以通过R语言中lm
函数进行线性回归模型的分析。我们利用R语言中自带的mtcars
数据集给出一个示例。mtcars
数据集包含了32个品牌/型号的汽车11种不同属性的测量值。