如何判断我们的线性回归模型是正确的?

1、回归诊断的基本方法

opar<-par(no.readOnly=TRUE)fit <- lm(weight ~ height, data = women)
 par(mfrow = c(2, 2))
 plot(fit)
 par(opar)

r语言 模型 r语言模型显著性检验_函数

为理解这些图形,我们来回顾一下OLS回归的统计假设。
(1)正态性(主要使用QQ图) 当预测变量值固定时,因变量成正态分布,则残差值也应该是一个均值为0的正态分布。正态Q-Q图(Normal Q-Q,右上)是在正态分布对应的值下,标准化残差的概率图。若满足正态假设,那么图上的点应该落在呈45度角的直线上;若不是如此,那么就违反了正态性的假设。
(2)独立性 你无法从这些图中分辨出因变量值是否相互独立,只能从收集的数据中来验证。上面的例子中,没有任何先验的理由去相信一位女性的体重会影响另外一位女性的体重。假若你发现数据是从一个家庭抽样得来的,那么可能必须要调整模型独立性的假设。
(3)线性(使用左上角的图,该曲线尽量拟合所有点) 若因变量与自变量线性相关,那么残差值与预测(拟合)值就没有任何系统关联。换句话说,除了白噪声,模型应该包含数据中所有的系统方差。在“残差图与拟合图”Residuals vs Fitted,左上)中可以清楚的看到一个曲线关系,这暗示着你可能需要对回归模型加上一个二次项。
(4)同方差性(左下角,点随机分布在曲线的周围) 若满足不变方差假设,那么在位置尺度图(Scale-Location Graph,左下)中,水平线周围的点应该随机分布。该图似乎满足此假设。最后一幅“残差与杠图”(Residuals vs Leverage,右下)提供了你可能关注的单个观测点的信息。从图形可以鉴别出离群点、高杠杆值点和强影响点

通过看图重新修改模型

newfit <- lm(weight ~ height + I(height^2), data = women[-c(13, 15),])
 par(mfrow = c(2, 2))
 plot(newfit)
 par(opar)

2、使用改进的方法进行

主要使用的car包,进行回归诊断

r语言 模型 r语言模型显著性检验_r语言 模型_02

(1)自变量的正态分布

qqPlot()函数提供了更为精确的正态假设检验方法

library(car)
 fit <- lm(Murder ~ Population + Illiteracy + Income + 
     Frost, data = states)
 qqPlot(fit, labels = FALSE, simulate = TRUE, main = "Q-Q Plot")

r语言 模型 r语言模型显著性检验_r语言 模型_03

(2)误差的独立性

durbinWatsonTest(fit)
 lag Autocorrelation D-W Statistic p-value
    1      -0.2006929      2.317691   0.248
  Alternative hypothesis: rho != 0

(3)线性相关 性

crPlots(fit, one.page = TRUE, ask = FALSE)

r语言 模型 r语言模型显著性检验_回归诊断_04

(4)同方差性

1、car包提供了两个有用的函数,可以判断误差方差是否恒定。ncvTest()函数生成一个计分检验,零假设为误差方差不变,备择假设为误差方差随着拟合值水平的变化而变化。

2、spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值与拟合值的关系

library(car)
 ncvTest(fit)Non-constant Variance Score Test 
 Variance formula: ~ fitted.values 
 Chisquare = 1.746514    Df = 1     p = 0.1863156

满足方差不变 p = 0.1863156   

spreadLevelPlot(fit)

3、线性模型假设的综合验证

library(gvlma)
 gvmodel <- gvlma(fit)
 summary(gvmodel)Call:
 lm(formula = Murder ~ Population + Illiteracy + Income + Frost, 
     data = states)

Residuals:

Min      1Q  Median      3Q     Max 
 -4.7960 -1.6495 -0.0811  1.4815  7.6210

Coefficients:

Estimate Std. Error t value Pr(>|t|)    
 (Intercept) 1.235e+00  3.866e+00   0.319   0.7510    
 Population  2.237e-04  9.052e-05   2.471   0.0173 *  
 Illiteracy  4.143e+00  8.744e-01   4.738 2.19e-05 ***
 Income      6.442e-05  6.837e-04   0.094   0.9253    
 Frost       5.813e-04  1.005e-02   0.058   0.9541    
 ---
 Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


 Residual standard error: 2.535 on 45 degrees of freedom
 Multiple R-squared:  0.567,     Adjusted R-squared:  0.5285 
 F-statistic: 14.73 on 4 and 45 DF,  p-value: 9.133e-08




 ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
 USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
 Level of Significance =  0.05

Call:

gvlma(x = fit) 

                     Value p-value                Decision
 Global Stat        2.7728  0.5965 Assumptions acceptable.
 Skewness           1.5374  0.2150 Assumptions acceptable.
 Kurtosis           0.6376  0.4246 Assumptions acceptable.
 Link Function      0.1154  0.7341 Assumptions acceptable.
 Heteroscedasticity 0.4824  0.4873 Assumptions acceptable.

4、多重共线性

如何检测多重共线性

library(car)
vif(fit)
Population Illiteracy     Income      Frost 
   1.245282   2.165848   1.345822   2.082547 
 sqrt(vif(fit)) > 2Population Illiteracy     Income      Frost 
      FALSE      FALSE      FALSE      FALSE

如何解决多重共线性?

使用岭回归、leasso。