對線性回歸模型進行診斷和解讀(Linear Regression Model Diagnosis & Interpretation)


我們用訓練集訓練出一個初步的模型后,並不能直接使用該模型,而是要對該模型進行診斷,並不斷對模型進行調整。

 

現以普林斯頓大學教授工資數據集為例,來說一下如何對模型進行診斷和對結果進行解讀。數據集下載地址:http://data.princeton.edu/wws509/datasets/salary.dat。

 

數據集特征如下:

sx = Sex, female and male

rk = Rank, assistant professor, associate professor, full professor

yr = Number of years in current rank

dg = Highest degree, doctorate and masters

yd = Number of years since highest degree was earned

sl = Academic year salary, in dollars

假設我們通過特征選擇,形成的一個初步的模型用了rk和yr這兩個變量。用R進行擬合的模型為:fit1=lm(sl~factor(rk)+yr,data=salary)。

 

下面對這個初步的模型fit1進行診斷:

 

一,該線性回歸模型是否滿足基本假設條件?

 

1,x和y之間是否線性相關?(即:模型是否能很好地擬合數據?)

畫殘差圖:可用R的plot(fit1, which=1)

畫偏殘差圖:可用R的car包里的crPlots(fit1)

從殘差圖上看不出有什么規律,說明模型擬合數據較好。

 

2,特征之間是否存在相關關系?(即:是否有共線性問題?)

計算VIF:可用R的car包里的vif(fit1)

              GVIF Df GVIF^(1/(2*Df))
factor(rk) 1.34824  2        1.077561
yr         1.34824  1        1.161138

特征的VIF都很小,可以認為不存在共線性的問題。

 

3,誤差項之間是否相互獨立?(即:是否有自相關問題?)

做杜賓-瓦特森檢驗:可用R的car包里的durbinWatsonTest(fit1)

 lag Autocorrelation D-W Statistic p-value
   1      0.06247094      1.808368   0.398
 Alternative hypothesis: rho != 0

p值大於0.05,可以認為誤差之間相互獨立。

 

4,誤差項是否服從正態分布?

畫Q-Q圖:可用R的car包里的qqPlot(fit1, labels = row.names(data), id.method = "identify", simulate = TRUE, main = "Q-Q Plot")

也可用R的plot(fit1, which=2)

有些許點偏離了對角線,因此不完全服從正態分布。

 

5,誤差項的方差是否基本不變?(即:是否有異方差問題?)

畫殘差圖:可用R的car包里的spreadLevelPlot(fit1)

也可用R的plot(fit1, which=3)

從殘差圖上看不出有什么規律,說明沒有異方差問題。

 

二,其他診斷

 

1,是否有異常點和強影響點?

異常點:計算學生化殘差,可用R的outlierTest(fit1)

   rstudent unadjusted p-value Bonferroni p
24 4.883852         1.2445e-05   0.00064712

p<0.05,說明24是異常點。但是一次只能測一個點,因此還可用R的rstudent(fit1)計算刪除學生化殘差,如刪除學生化殘差的絕對值大於3,可認定為異常值。

 

強影響點:計算Cook's D,可用R的plot(fit1, which=4)

沒有Cook's D大於0.5的點,可以認為沒有強影響點。

 

也可用R的car包里的influencePlot(fit1, main="Influence Plot")把異常點,高杠桿點和強影響點一網打盡:

      StudRes        Hat      CookD
1   0.6123891 0.22946768 0.02828899
2   2.1335846 0.05481303 0.06144973
21 -1.4094468 0.17759400 0.10508576
24  4.8838522 0.05612032 0.24019148

可以看出,其中1和21是高杠桿點。24是異常點。

 

2,是不是至少有一個自變量對於預測因變量是有用的?

看F-test結果:可用R的summary(fit1)

Call:
lm(formula = sl ~ factor(rk) + yr, data = salary) Residuals: Min 1Q Median 3Q Max -3462.0 -1302.8 -299.2 783.5 9381.6 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 16203.27 638.68 25.370 < 2e-16 *** factor(rk)associate 4262.28 882.89 4.828 1.45e-05 *** factor(rk)full 9454.52 905.83 10.437 6.12e-14 *** yr 375.70 70.92 5.298 2.90e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2402 on 48 degrees of freedom Multiple R-squared: 0.8449, Adjusted R-squared: 0.8352 F-statistic: 87.15 on 3 and 48 DF, p-value: < 2.2e-16

p<0.05,說明至少有一個自變量對於預測因變量是有用的。

 

3,是所有的自變量都有用還是只有一部分自變量有用?

看t-test結果:可用R的summary(fit1)

Call:
lm(formula = sl ~ factor(rk) + yr, data = salary) Residuals: Min 1Q Median 3Q Max -3462.0 -1302.8 -299.2 783.5 9381.6 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 16203.27 638.68 25.370 < 2e-16 *** factor(rk)associate 4262.28 882.89 4.828 1.45e-05 *** factor(rk)full 9454.52 905.83 10.437 6.12e-14 *** yr 375.70 70.92 5.298 2.90e-06 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 2402 on 48 degrees of freedom Multiple R-squared: 0.8449, Adjusted R-squared: 0.8352 F-statistic: 87.15 on 3 and 48 DF, p-value: < 2.2e-16

所有自變量參數估計值的p<0.05,說明所有的自變量都有用。

 

4,是否需要增加交互項?

從業務角度分析,有可能產生協同效應的變量間才考慮交互項。(此處略過)

 

5,是否需要增加特征?

需從業務角度考慮。(此處略過)

 

從上述的診斷中可以看出,除了誤差項不服從正態分布以及有一個點是異常點之外,其他都沒有問題。而誤差項不服從正態分布的原因很可能是由於異常點的緣故。通過查看異常點,發現應該不是記錄有誤,因此在此保留該異常點。

 

假設現在我們通過交叉驗證選擇出了最好的模型(假設還是模型fit1),現對這個模型的結果進行解讀:

 

一,預測

 

1,對於給定的自變量的值,對因變量進行預測,預測的准確度有多少?

點估計: 可用R的predict(fit1,data.frame(rk=c('assistant','full'), yr=c(8,15)))  

       1        2 
19296.83 30896.11 

 

區間估計:

置信區間(Cofidence Interval):模型平均的預測准確度,可用R的predict(fit1,data.frame(rk=c('assistant','full'), yr=c(8,15)), interval = "confidence")

       fit      lwr      upr
1 19296.83 18256.19 20337.47
2 30896.11 29857.47 31934.76

預測區間(Prediction Interval):對單個樣本預測的准確度,可用R的predict(fit1,data.frame(rk=c('assistant','full'), yr=c(8,15)), interval = "prediction")

       fit      lwr      upr
1 19296.83 15185.27 23408.39
2 30896.11 26785.06 35007.16

這里提供兩個全新的點供模型來預測,並且分別用interval指定返回置信區間或者預測區間。預測區間一定比置信區間要寬。

 

二,推斷

 

1,哪個自變量對模型最重要?

用自變量的參數估計值除以標准誤差(注:不能直接用參數估計值進行衡量,因為各個變量的單位不一樣,需要消除量綱的影響)

Coefficients:
                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)         16107.62     526.05  30.620  < 2e-16 ***
factor(rk)associate  4192.32     726.84   5.768 6.03e-07 ***
factor(rk)full       8808.72     757.21  11.633 1.95e-15 ***
yr                    398.65      58.56   6.808 1.60e-08 ***

可以看出,計算出的結果就是t值。也就是說t值越大,該特征能提供更多的信息,也就是對模型來說越重要。

 

參考:

https://www.cnblogs.com/gyjerry/p/6287275.html

https://www.jianshu.com/p/4c6c8174f292

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM