Stata中的模型诊断图之Residual vs Fitted Plot以及线性回归假设简述

线性回归是概率统计学里最重要的统计方法, 它实际上是一种参数化的方法, 因而为了达到分析目的, 我们需要对模型设定一些假设. 我们有不同的工具可以用来诊断这些假设是否成立, 从而帮助我们判断线性拟合是否成立. 如果回归分析不满足这些假设, 那么分析的结果就会出现偏差. 线性回归的五个基本假设有:

1. 线性性和可加性 (Linear relationship).

这个假设认为自变量和因变量之间是纯线性关系, 自变量中没有Xi的高阶项, 或某两/几个变量的交叉项. 在统计中我们经常用来检测这个假设的诊断工具就是Residual vs Fitted Value Plot. 我会在下文进行详细说明.


2. 误差项应呈正态分布 (Multivariate normality).

如果误差项不呈正态分布, 置信区间就会变得不稳定. 对于此假设最常用的诊断工具是Q-Q Plot.如果误差呈正态分布, 则Q-Q Plot里的散点会贴近y=x这条直线; 如果不满足正态分布, 散点会偏离这条直线.


3. 自变量之间相互独立, 也就是说没有或几乎不存在多重共线性 (Multicollinearity).

这个假设认为每一个自变量之间应该是相互独立的, 当某两个或几个变量之间高度相关时, 就会出现多重共线性. 多重共线性会导致标准差偏大, 置信区间变宽. 用来判断多重共线性的常用方法有:

a) 相关矩阵 (Correlation matrix) - 如果两个自变量之间的相关系数接近于1, 则说明两者之间 有很强的相关性;

b) 模型的F检验显著, 但单个自变量的t检验却不显著;

c) 容忍度(Tolerance) 与方差扩大因子(VIF). 一般来说, 容忍度越小, 多重共线性越严重. 通常情 况下, 当容忍度小于0.1时, 我们认为存在严重的多重共线性. 方差扩大因子是容忍度的倒数, 因而VIF越大, 多重共线性越严重. 一般我们认为当VIF>10时就存在严重的多重共线性. 关于 多重共线性和VIF, 您可以参考Stata里的多重共线性检验-方差膨胀系数 (VIF)这篇文章.


4. 误差项之间应相互独立, 或者说没有或近乎没有自相关性 (Autocorrelation).

当误差之间不相互独立, Y(X+1)就会受到前一项Y(X)影响, 这时我们说模型存在自相关性. 自相关性通常发生在时间序列里. 当自相关性发生时, 标准差会偏小, 从而导致置信区间变窄. 我们通常用观察杜宾-瓦特森统计量 (Durbin-Watson Statistic) 来检查自相关性. 该统计量的值落在(0,4)内. DW=2意味着没有自相关性, 0<DW<2表示残差间有正的相关性; 2<DW<4表明残差间有负的相关性.


5. 同方差性 (Homoscedasticity)

当模型中有异方差性 (Heteroskedasticity) 时, 意味着误差项的方差不是一个常数. 异方差性的出现往往意味着数据中存在异常值 (Outlier). 我们同样可以使用Residual vs Fitted Value Plot来检测异方差性. 如果图中散点呈现“漏斗形”, 即当残差有规律地变大或变小时, 说明存在异方差性. 当出现异方差性时, 我们可以对因变量进行一些非线性转换, 比如采取对数或平方根等的形式.

在上文中提到了用Residual vs Fitted Plot来检测模型是否存在线性关系. 接下来我会为大家举例说明如何用该图来判断模型是否为线性.


首先我以price为因变量, displacement和weight为自变量进行一个多元线性回归:

sysuse auto
regress mpg displacement weight

接着在命令窗口输入:

rvfplot, yline(0)

这样Stata就绘制出了如下所示的图. 我增加了y=0这条线使我们更能清晰地看出散点的趋势:

上图中, 横轴是y值, 也就是从数据所得的因变量的真实值; 纵轴是残差, 也就是真实值和估计值的差. 我们以残差为因变量, 考察它与实际值之间的关系. 如果模型符合线性假设, 则散点在图中应在y=0这条线附近大致呈对称状均匀分布, 且没有明显的分布趋势. 如果残差随着y值增大而有增大或减小的趋势, 或者残差的分布接近于一个二次曲线, 则说明原模型不存在线性关系, 这时我们可以对自变量进行求对数, 求指数, 或求平方根等变化, 然后再进行线性回归. 我们在上文中提到, 如果线性模型成立, 则应满足同方差性 (Homoscedasticity) , 这种情况下图中的散点应大致在一个和y=0平行的区间里分布, 如果在图中有很明显的远离散点的点, 这些点很有可能是异常值 (Outlier). 还有一点值得注意的是, 当我们做线性拟合时, 在拟合直线上的点对应于图中y=0上的点, 因为在该线上残差为零, 真实值和估计值一致.


下面回到上图中. 很明显, 图中的散点呈发散状, 并没有在y=0附近均匀地上下浮动. 并且大部分点集中在下部, 因此我们可以判断原模型不存在线性关系. 其实我们从模型的检验中也可以看出自变量displacement并不显著, 这就意味着我们可能需要对displacement进行一些非线性的形式上的变化:

接下来我们再来看一个例子. 这次我以weight为因变量, length和mpg为自变量考察模型的线性关系并绘制Residual vs Fitted Plot:

regress weight length mpg
rvfplot, yline(0)

在上图中我们可以看到散点基本在y=0附近无规律地拨动, 也没有明显的增大或减小的趋势. 如果仔细观察, 散点可能稍稍呈现出二元曲线的趋势. 整体上来说, 这个图中的散点是无规律地在y=0附近波动, 并且这些散点大致都在与y=0平行的区间里分布. 但同时我们注意到在图中的上方有三个很明显的outliers. 我们可以用以下命令来判断是哪几个点:

rvfplot, mlabel(make)

Residual vs Fitted Plot 是诊断模型是否为线性的一个很常用的诊断工具, 但其实还有其他常用的工具可以用来检验模型是否存在线性关系. 这些其他的诊断方式通过判断模型是否满足线性模型的假设从而判断线性拟合是否成立, 比如我们之前提到的Q-Q Plot, VIF和DW统计量. 如果您想了解关于检验线性模型的其他方法, 请发邮件至sales@surveydesign.com.au.


253 views0 comments

Recent Posts

See All