library(faraway)
data(savings)
#建立複線性迴歸模型
mdl<-lm(sr~pop15+pop75+dpi+ddpi,savings)
#使用指令coefficients()得到整體迴歸模型迴歸係數beta,以savings資料為例:
#sr=28.56609+(-0.46119)*pop15+(-1.69150)*pop75+(-0.00034)*dpi+(0.40969)*ddpi
round(coefficients(mdl),5)
#使用指令summary()可以彙總物件mdl的內容,了解上述模型是否可簡化,及探討模型的解釋能力。
summary(mdl)
#以savings資料為例,F-statistic: 5.756 on 4 and 45 DF,p-value: 0.0007904知道引入解釋變數是有統計意義。
這個模型mdl的能解釋y的變異達 33.85%,後面須看看配適殘差圖呈現的型態及觀察離群值是否有影響。
再由beta係數的彙總資料發現pop75的p-value=0.125530 > 0.05和pop75的p-value=0.719173 > 0.05 皆不拒絕Ho可以考慮把pop75或dpi拿掉。
#以上的結果要成立必須是,residuals必須是滿足常態假設,且變異數為常數。
#先利用偏F檢定判斷上面兩個不拒絕Ho之變數是否該忽略。
#設一個忽略掉pop75、dpi這個變數的新的模型為mdl1。
mdl1<-lm(sr~pop15+ddpi,savings)
#再使用anova()指令對mdl和mdl1兩個模型做變異數分析,檢定pop75和dpi可以同時忽略(Ho : pop75=dpi=0)。
anova(mdl1,mdl)
#由變異數分析資料發現的p-value=0.19> 0.05 所以不拒絕Ho,考慮用Model1。
#殘差VS配適值關係圖
plot(fitted(mdl1),residuals(mdl1))
mean(fitted(mdl1))
#使用var.test()指令檢定該模型mdl1的變異數是否為常數,配適值範圍可用模型之配適值之平均值。
var.test(residuals(mdl1)[fitted(mdl1)>9.671],residuals(mdl1)[fitted(mdl1)<9.671])
#使用qqnorm()指令跑出QQ-norm圖。
qqnorm(residuals(mdl1))
qqline(residuals(mdl1))
#使用shapiro.test()指令檢定此模型mdl1之常態假設是否成立。
shapiro.test(residuals(mdl1))
#常態假設以及變異數檢定皆成立,最後再檢查是否有離群值存在,
#載入套件car,使用outlierTest()指令找離群值。
library(car)
outlierTest(mdl1)
#文字的離群值可以照C大的指令刪除了 是我不小心指令有打錯= =+
#但有問題是outlierTest()指令只會跑出一個離群值 而且不一定會是影響點 應該是不能亂動
#有個想法是說利用cook's distance plot找出影響點 再將影響點從資料中刪除 再重新建模再做檢定 不知到是否可行?
cutoff <- 4/((nrow(savings)-length(mdl1$coefficients)-2))
plot(mdl1, which=4, cook.levels=cutoff)