我們用訓練集訓練出一個初步的模型后,並不能直接使用該模型,而是要對該模型進行診斷,並不斷對模型進行調整。
現以普林斯頓大學教授工資數據集為例,來說一下如何對模型進行診斷和對結果進行解讀。數據集下載地址: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