回归分析指用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量、效标变量或结果变量)的方法。
回归包括简单线性、多项式、多元线性、多变量、Logistic回归、泊松、时间序列、非线性、非参数、稳健、Cox比例风险回归等多种形式。
下文主要介绍普通最小二乘(OLS)回归法,包括简单线性回归、多项式回归和多元线性回归。
条件:减小因变量的真实值与预测值的差值来获取模型参数,即残差平方和最小。
为了能够恰当地解释OLS模型的系数,数据必须满足以下统计假设:
(1)正态性。对于固定的自变量值,因变量值成正态分布
(2)独立性。Yi值之间相互独立。
(3)线性。因变量与自变量之间为线性相关。
(4)同方差性。因变量的方差不随自变量的水平不同而变化。
1 用lm()拟合回归模型
格式:myfit <-lm(formula, data)
其中,formula指要拟合的模型形式,data是一个数据框,包含了用于拟合模型的数据。
表达式(formula)形式如:Y~X1+X2+…+Xk
~左边为因变量,右边为各个自变量,自变量之间用+符号分隔,表达式中还有其他符号
对拟合线性模型非常有用的其他函数
函数 | 用途 |
summary() | 展示拟合模型的详细结果 |
coefficients() | 列出拟合模型的模型参数(截距项和斜率) |
confint() | 提供模型参数的置信区间(默认95%) |
fitted() | 列出拟合模型的预测值 |
residuals() | 列出拟合模型的残差值 |
anova() | 生成一个拟合模型的方差分析表,或者比较两个或更多拟合模型的方差分析表 |
vcov() | 列出模型参数的协方差矩阵 |
AIC() | 输出赤池信息统计量 |
plot() | 生成评价拟合模型的诊断图 |
predict() | 用拟合模型对新的数据集预测响应变量值 |
2 简单线性回归
R平方项(0.991)表明模型可以解释体重99.1%的方差,也是实际和预测值之间的相关系数
残差标准误(1.1525)则可认为是模型用身高预测体重的平均误差
F统计量检验所有的自变量预测因变量是否都在某个几率水平之上。对简单线性回归来说,只有一个自变量,此时F检验等同于身高回归系数的t检验。
3 多项式回归
此时代码可以写为:fit2 <- lm(weight ~ height + I(height^2), data = women)
注:多项式回归仍是线性回归
car包中的scatterplot()函数,既提供散点图、线性拟合曲线和平滑拟合(loess)曲线,还在相应边界展示了每个变量的箱线图。
4 多元线性回归
当自变量不止一个时,简单线性回归就变为多元线性回归。
多元回归分析中,第一步最好检查下变量间的相关性。——cor()函数
scatterplotMatrix ( )函数默认在非对角区域绘制变量间的散点图,并添加平滑(loess)和线性拟合曲线。对角线区域绘制每个变量的密度图和轴须图。
此时代码例子为:fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
当变量系数没有显著不为0(p值较大时),表明当控制其他变量不变时,该自变量与因变量不呈线性相关。
5 有交互项的多元线性回归
此时代码例子为:fit <- lm(mpg ~ hp + wt + hp:wt, data = mtcars)
若两个自变量的交互项显著,则说明因变量与其中一个自变量的关系依赖于另一个自变量。
用effects包中的effect()函数,可以用图形展示交互项结果(即当一个变量取某个固定的值时,另一个自变量变化时因变量的变化),格式为:
plot(effect(term, mod, xlevels), multiline =TRUE)
term即模型要画的项,mod为通过lm()拟合的模型,xlevels是一个列表,指定变量要设定的常量值,multiline = TRUE选项表示添加相应直线。
例:plot(effect("hp:wt", fit, list(wt = c(2.2, 3.2, 4.2))), multiline = TRUE)
虽然summary()函数对模型有了整体的描述,但是没有提供关于模型在多大程度上满足统计假设的任何信息,即没有任何输出告诉你模型是否合适。回归诊断技术提供了评价回归模型适用性的必要工具,帮助发现并纠正问题。
R中基础包中提供了函数的标准方法,car包中提供改进了的新方法。
1 标准方法
最常用方法:对lm()函数返回的对象使用plot函数,可以生成评价模型拟合情况的四幅图形
Q-Q图对应正态性检验
Residuals vs Fitted(残差图与拟合图)对应线性假设,若图中有曲线关系,则可能需要对回归模型加二次项。
Scale-Location Graph(位置尺度图)对应同方差性。若水平线周围的点随机分布,则满足假设。
Residual vs Leverage(残差与杠杆图)提供可能关注的单个观测点。从图上可以鉴别出离群点、高杠杆点和强影响点。
2 改进的方法
car包提供了大量函数,大大增强了拟合和评价回归模型的能力。gvlma包也提供了对所有线性模型假设进行检验的方法。以下是以car包为例。
(1)正态性
采用qqplot函数
(2)误差的独立性
car包提供了一个可做Durbin-Watson检验的函数,能够检测误差的序列相关性。对应函数为durbinwatsonTest()。
(3)线性
通过成分残差图可以观察因变量与自变量之间是否呈线性关系。对应car包中crPlot函数绘制。
(4)同方差性
Car包中提高两个有用函数。
ncvTest()函数生成一个计分检验,零假设为误差方差不变,备择假设为误差方差随着拟合值水平的变化而变化。若检验显著,则说明存在异方差性(误差方差不恒定)。
spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值
与拟合值的关系。
3 线性模型假设的综合验证
gvlama包中的gvlama()函数,除了能对线性模型假设进行综合验证,同时还能做偏斜度、峰度和异方差性的评价。
4 多重共线性
多重共线性会导致模型参数的置信区间过大,使单个系数解释起来很困难。多重共线性可用统计量VIF(Variance Inflation Factor,方差膨胀因子)进行检测。VIF的平方根表示变量回归参数的置信区间能膨胀为与模型无关的预测变量的程度
Car包中vif()函数提供VIF值。一般原则下,√vif >2就表明存在多重共线性问题。
1 离群点
离群点指模型中预测效果不佳的观测点。它们通常有很大的、或正或负的残差(真实值-预测值)。
car包也提供了一种离群点的统计检验方法。outlierTest()函数可以求得最大标准化残差绝对值Bonferroni调整后的p值。注意,该函数只是根据单个最大(或正或负)残差值的显著性来判断是否有离群点。若不显著,则说明数据集中没有离群点;若显著,则你必须删除该离群点,然后再检验是否还有其他离群点存在。
2 高杠杆值
高杠杆值观测点,即是与其他预测变量有关的离群点。换句话说,它们是由许多异常的预测
变量值组合起来的,与响应变量值没有关系。高杠杆值的观测点可通过帽子统计量(hat statistic)判断。对于一个给定的数据集,帽子均值为p/n,其中p 是模型估计的参数数目(包含截距项),n 是样本量。
3 强影响点
强影响点,即对模型参数估计值影响有些比例失衡的点。例如,若移除模型的一个观测点时模型会发生巨大的改变,那么你就需要检测一下数据中是否存在强影响点了。有两种方法可以检测强影响点:Cook距离,或称D统计量,以及变量添加图(added variable plot)。
经过回归诊断发现后,处理违背回归假设的方法有:
(1)删除观测点
(2)变量变换
(3)添加或删除变量
(4)使用其他回归方法
1 模型比较
基础安装包中的anova()函数可以比较嵌套模型的拟合优度。
2 变量选择
从大量候选变量中选择最终的预测变量有以下两种流行的方法:逐步回归法(stepwise
method)和全子集回归(all-subsets regression)。
附录:
R表达式中常用符号
符号 | 用途 |
~ | 分隔符号,左边为响应变量,右边为解释变量。例如,要通过x、z和w预测y,代码为y ~ x + z + w |
+ | 分隔预测变量 |
: | 表示预测变量的交互项。例如,要通过x、z及x与z的交互项预测y,代码为y ~ x + z + x:z |
* | 表示所有可能交互项的简洁方式。代码y~ x * z * w可展开为y ~ x + z + w + x:z + x:w + z:w +x:z:w |
^ | 表示交互项达到某个次数。代码y ~ (x + z + w)^2可展开为y ~ x + z + w + x:z + x:w + z:w |
. | 表示包含除因变量外的所有变量。例如,若一个数据框包含变量x、y、z和w,代码y ~ .可展开为y ~ x +z + w |
- | 减号,表示从等式中移除某个变量。例如,y ~ (x + z + w)^2 – x:w可展开为y ~ x + z + w +x:z + z:w |
-1 | 删除截距项。例如,表达式y ~ x - 1拟合y在x上的回归,并强制直线通过原点 |
I() | 从算术的角度来解释括号中的元素。例如,y ~ x + (z + w)^2将展开为y ~ x + z + w + z:w。相反, 代码y~ x + I((z + w)^2)将展开为y ~ x + h, h是一个由z和w的平方和创建的新变量 |
function | 可以在表达式中用的数学函数。例如,log(y) ~ x + z + w表示通过x、z和w来预测log(y) |