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