回归分析残差不满足正态分布_SAS线性回归模型诊断

采用最小二乘法进行线性回归时,需要满足特定的条件:

  1. 正态性:一定范围内,给定任意x值,对应的y均服从正态分布

  2. 独立:即误差项间不存在相关,一般时间序列数据会存在自相关

  3. 线性:因变量和自变量有线性关系

  4. 同方差性:即模型误差项的方差相等。

这些假设都与误差项有关,所以我们可以从误差的估计量残差来解决,即我们常用到的残差分析、残差图等。残差图就是以某种残差(残差、标准化残差、学生化残差等)为纵坐标,以任何其他的量为横轴的散点图,如果数据能较好满足回归条件,那么残差图会是一个在水平线周围随机均匀分布的散点图。另外我们也可通过假设检验的手段进行回归诊断。

残差图诊断

1.正态性:如果满足此条件,那么残差值将服从正态分布。可以采用残差的qq图来判断

2.线性:可以采用残差和预测值散点图,如果满足线性,那么残差值与预测值没有任何关联。

3.同方差性:可以看学生化残差图和预测值的散点图,如果满足同方差性假设,那么散点大致落在±2的区域,且不呈任何趋势。

对于回归中的残差诊断图,SAS程序会自动生成并展示在结果里。

假设检验诊断:

  1. 正太性:可以输出残差,使用univariate过程步进行正态检验。或者使用transreg过程box-cox转换方法

  2. 同方差性:SAS里提供white检验和bp法。

  3. 线性:可以使用网上的boxTdiwell变换的宏程序。该宏的运行还需使用另外一个gskip宏程序才能运行。两个宏程序下载地址:

    boxTdiwell:http://www.datavis.ca/sas/macros/boxtid.sas

    gskip:http://www.datavis.ca/sas/macros/util/gskip.sas

  4. 自相关:DW检验,SAS程序里加入dw选项,后文不再介绍

下面我们使用sashelp.class的数据拟合一个简单线性回归模型进行说明。

拟合模型:

proc reg data=sashelp.class;   model height=age;run;

一、SAS生成的部分诊断图(rstudent为学生化残差):可以看出基本满足回归条件

回归分析残差不满足正态分布_SAS线性回归模型诊断_第1张图片

二、假设检验诊断程序:

1.正态性

程序:

*正态box-cox变换;proc transreg data=sashelp.class test;    model BoxCox(height) = identity(age);run;

结果:

回归分析残差不满足正态分布_SAS线性回归模型诊断_第2张图片

003162a02a9bafdb15e83b77eb2c4cc1.png

可以看到参数lambda=1(lamabda=1表示不转换,lambda=0时表示对因变量进行对数转换,转换的规则为y的lambda次方)在95%的置信区间内,可以认为满足正态的条件,不考虑进行转换。如果转换,lambda的值可以考虑取红色方块的值。

2.线性

程序:

*载入两个宏程序,boxTidwell线性检验与转换;%INCLUDE "C:\Users\Administrator\Desktop\boxTidwell.sas";%INCLUDE "C:\Users\Administrator\Desktop\gskip.sas";%boxtid(data=sashelp.class,yvar=height,xvar=age,xtrans=age,id=name)

结果:

回归分析残差不满足正态分布_SAS线性回归模型诊断_第3张图片

可以看出结果p=0.7282,可以认为满足线性,如果p<0.05,则使用power的值对自变量进行转换,因为power的值接近-0.5,所以它建议使用-0.5次方(0.5次方即开根号)进行转换,该处理方法也适用于上。

3.同方差性

程序:

*parms语句指定系数,const为常数项,beta为age回归系数,white为white检验,breusch为bp检验,括号1代表截距,age代表自变量;proc model data=sashelp.class;    parms const beta;    height=const+age*beta;    fit height /white breusch=(1 age);run;quit;

结果:可以看出两种方法都表示满足同方差性。

回归分析残差不满足正态分布_SAS线性回归模型诊断_第4张图片

另外在R软件里有更多的关于回归诊断的函数,我们可以在SAS里调用R软件来帮助我们判断。程序如下:

*开启调用R的选项;proc options option=rlang;run;*iml模块调用R;proc iml;  run exportdatasettoR("sashelp.class", "test"); *将sas数据导入到R里;  submit/r; *开始调用R;  #R里的car包有很多做诊断的函数,可以对模型进行线性、正态性、同方差性等检验  library(car)  mod = lm(Height ~ Age, data = test)  #基础包plot()函数可以生成4幅诊断图  plot(mod)  #qqPlot()函数可以对正态性检验,如果不满足,可以使用powerTransform()函数对因变量进行box-cox正态转换  summary(powerTransform(mod))  #boxTidwell()函数对模型进行线性检验,并给出自变量转换参数来让模型满足线性  boxTidwell(Height ~ Age, data = test)  #ncvTest()函数对模型进行同方差检验,spreadLevelPlot()可以对不满足同方差模型提供因变量转换参数  ncvTest(mod)  spreadLevelPlot(mod)  endsubmit; *结束调用;quit;

结果:

回归分析残差不满足正态分布_SAS线性回归模型诊断_第5张图片

你可能感兴趣的:(回归分析残差不满足正态分布)