R语言回归分析

回归分析可以说是统计学的核心,它其实是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量、效标变量或结果变量)的方法。通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量来预测响应变量。
最小二乘法回归是通过预测变量的加权和来预测量化的因变量,其中权重是通过数据估计而得的参数,目标是通过减少响应变量的真实值与预测值的差值来获得模型参数(截距项和斜率),具体而言,即使得残差平方和最小。下面将通过几篇博客介绍回归分析,这是第二篇:异常观测值。

8.4.1 离群点

离群点是指那些模型预测效果不佳的观测点。它们通常有很大的、或正或负的残差(Y[i] –Ŷ[i] 。
正的残差说明模型低估了响应值,负的残差则说明高估了响应值。下面是查看离群点的两种方法:

  • QQ图:在之前通过QQ图,落在置信区间带外的点即可被认为是离群点
  • 标准化残差:另外一个粗糙的判断方法是:标准化残差值大于2或者小于–2的点可能是离群点,需要特别关注。

这里介绍的是car包里面的outlierTest()函数,该函数可以求得最大标准化残差绝对值Bonferroni调整后的p值,注意,该函数只是根据单个最大(或正或负)残差值的显著性来判断是否有离群点。若不显著,则说明数据集中没有离群点;若显著,则你必须删除该离群点,然后再检验是否还有其他离群点存在。

library(car)
states <- as.data.frame(state.x77[,c("Murder", "Population",
                                     "Illiteracy", "Income", "Frost")])
lm.fit6 <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
plot(lm.fit6) #查看第四幅图
 
outlierTest(lm.fit6)
states <- states[-which(rownames(states) == "Nevada"),] #删除最大标准误差的点
lm.fit6 <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)
outlierTest(lm.fit6)

8.4.2 高杠杆值点

高杠杆值观测点,即与其他预测变量有关的离群点。换句话说,它们是由许多异常的预测变
量值组合起来的,与响应变量值没有关系。

高杠杆值的观测点可通过帽子统计量(hat statistic)判断。对于一个给定的数据集,帽子均值为p/n,其中p是模型估计的参数数目(包含截距项),n是样本量。一般来说,若观测点的帽子值大于帽子均值的2或3倍,就可以认定为高杠杆值点。

高杠杆值点可能是强影响点,也可能不是,这要看它们是否是离群点。

hat.plot <- function(fit) {
p <- length(coefficients(fit))
n <- length(fitted(fit))
plot(hatvalues(fit), main="Index Plot of Hat Values")
abline(h=c(2,3)*p/n, col="red", lty=2)
identify(1:n, hatvalues(fit), names(hatvalues(fit)))
}
hat.plot(fit)

8.4.3 强影响点

强影响点即对模型参数估计值影响有些比例失衡的点。例如,若移除模型的一个观测点时模型会发生巨大的改变,那么你就需要检测一下数据中是否存在强影响点了。

可以使用car包中的avPlots()函数,图中的直线表示相应预测变量的实际回归系数。你可以想象删除某些强影响点后直线的改变,以此来估计它的影响效果。

有两种方法可以检测强影响点:Cook距离,或称D统计量,以及变量添加图(added variable
plot)。一般来说,Cook’s D值大于4/(n–k–1),则表明它是强影响点,其中n为样本量大小,k是预
测变量数目。

Cook’s D图有助于鉴别强影响点,但是并不提供关于这些点如何影响模型的信息。所谓变量添加图,即对于每个预测变量X[k] ,绘制X[k] 在其他k–1个预测变量上回归的残差值相对于响应变量在其他k–1个预测变量上回归的残差值的关系图。 car 包中的 avPlots() 函数可提供变量添加图:

avPlots(lm.fit6)

cutoff <- 4/(nrow(states)-length(lm.fit6$coefficients)-2)
plot(lm.fit6, which=4, cook.levels=cutoff)
abline(h=cutoff, lty=2, col="red")

8.4.4 综合判断

利用 car 包中的 influencePlot() 函数,你还可以将离群点、杠杆值和强影响点的信息整合到一幅图形中。

纵坐标超过+2或小于–2的可被认为是离群点,水平轴超过0.2或0.3的州有高杠杆值(通常为预测值的组合)。圆圈大小与影响成比例,圆圈很大的点可能是对模型参数的估计造成的不成比例影响的强影响点。

influencePlot(lm.fit6)