1. 程式人生 > >R教材6 迴歸

R教材6 迴歸

  1. 大部分情況下,我們用OLS(最小二乘法)來得出迴歸模型
  2. lm(formula,data)擬合迴歸模型,data是資料框
    1. y~x,左邊為響應變數,右邊為解釋變數;+分隔預測變數
    2. :表示互動項,x:y
    3. *表示所有可能互動項的簡潔方式,x*z=x+z+x:z
    4. ^表示互動達到某個次數,(x+z+w)^2=x+z+w+x:z+x:w+z:w
    5. .表示出因變數外的所有變數,不包含自變數間的互動項
    6. -從等式中移除某個變數
    7. -1刪除截距項
    8. I()從算術的角度來解釋括號中的元素,如I(x^2);在R中寫回歸模型,單個x^2是不能寫的,必須這樣寫
    9. fun可以在表示式中用的數學函式,可用在因變數,log(y)~x+z
  3. 迴歸結果分析函式
    1. summary()
    2. coefficients()列出模型的係數
    3. confint()提供模型引數的置信區間
    4. fitted()擬合模型的預測,模型擬合的y值,fitted(模型)
    5. residuals()擬合模型的殘差
    6. anova()比較多個擬合模型的方差分析,可以比較模型間是否有差異,根據奧卡姆剃刀原則,可以比較是否是最優最簡模型
    7. vcov()模型引數的協方差矩陣
    8. AIC()赤池資訊統計量
    9. plot()作4張圖
    10. *abline()在前一個圖上劃直線;lines(x,y)根據點作平滑的曲線
    11. *car::scatterplot()更方便地繪製二元關係圖
    12. predict()用擬合模型對新資料預測y
    13. *options(digits=2),設定小數點後2位
  4. 多元線性迴歸
    1. 首先,檢查變數間的相關性cor()
      1. car::scatterplotMatrix(),變數間的散點圖矩陣
    2. lm(y~.,data),在多元迴歸中要考慮互動項,具有相關性就有可能有互動項
      1. effects::effect("term",mod,,xlevels=list(物件=c(確定的多值))),圖形展示互動項結果(偏方法,一項確定的值下的另一項的變化);term模型要做的互動項,mod即模型,xlevels是一個列表,指定變數要設定的常量值
        1. 配合作圖plot(effect(),multiline=T),multiline=T新增相應直線
    3. 迴歸診斷,檢驗資料集資料是否滿足統計假設前提,部分情況下得出模型即可,對模型的前提的檢驗是不看重的,但是實際情況下,儘量要滿足前提條件
      1. 線性迴歸的4個前提
        1. *殘差即模型的隨機誤差項的觀測值,殘差的方差即模型的方差
        2. 線性:殘差是一個期望值或平均值為0的隨機變數
        3. 同方差性:殘差具有同方差性
        4. 正態性:殘差服從正態分佈
        5. 獨立性:殘差與預測值不相關
      2. par(mfrow=c(2,2)),plot(mod)檢驗四圖
        1. Residuals vs.Fitted殘差擬合圖:線性和獨立性,擬合線應該是為0的直線,殘差無規律的分佈在0水平線的兩側
        2. Normal Q-Q殘差正態圖:正態性,理論殘差和標準殘差的對應圖,45°直線則殘差正態分佈
        3. scale-Location同方差性:同方差性,滿足不變方差假設,線周圍的點應該隨機分佈
        4. Residuals vs.Leverage殘差槓桿圖:鑑別離群點、高槓杆值點和強影響點
          1. 離群點對模型的預測效果不佳
          2. 高槓杆預測變數x中的離群點
          3. 強影響點表明它對模型引數的估計產生的影響過大
    4. 迴歸診斷改進,car包
      1. qqPlot(mod)分位數比較圖
      2. inluencePlot()迴歸影響圖
      3. scatterplot()增強的散點圖
      4. scatterplotMatrix()增強的散點圖矩陣,屬性的相關性矩陣
      5. 改進的前提論證
        1. 正態性:qqPlot(mod,id.method="identity")分位數比較圖:n-p-1個自由度的t分佈下的學生化殘差studentized residual
          1. *source(".R"),匯入R script
        2. 誤差的獨立性:durbinWatsonTest(mod),DurbinWatson檢驗:檢測誤差的序列相關性,適用於時間獨立的資料,H0:無自相關性
        3. 線性:crPlots(mod)偏殘差圖:對模型的各個屬性進行檢驗,若圖形存在非線性則該屬性的函式形式建模不夠充分,對x或y變形
        4. 同方差性:ncvTest(mod):計分檢驗,H0:誤差方差不變
          1. spreadLevelPlot(mod):最佳擬合曲線散點圖,展示標準化殘差絕對值和擬合值的關係,方差不變則點在水平的最佳擬合曲線周圍呈水平隨機分佈;Suggested power transformation建議冪次變換
    5. 線性模型假設的綜合驗證:gvlma::gvlma(mod),summary(gvlma(mod)),對整體前提大概的檢驗,看global stat的結論
    6. 多重共線性:自變數之間具有相關性
      1. vif(mod),vif>4則表明有多重共線性
  5. 異常觀測值:模型應該儘量符合資料,而不是資料擬合模型
    1. 離群點:outlierTest(mod),H0:模型中沒有離群點,根據一個絕對值最大的殘差值的顯著性來判斷是否有離群點,看Bonferonni p值,NA代表符合H0
    2. 高槓杆值點:異常的預測變數值x,hat statistic帽子統計量,hatvalues(mod)求出帽子統計量,自制hat.plot函式標出高槓杆值點
    3. 強影響點:對模型影響較大的點
      1. Cook距離,D統計量:Cook's D>4/(樣本量-x個數-1)
      2. 變數新增圖:avPlots(mod,ask=F),單個自變數在其他自變數上回歸的殘差值相對於因變數在其他自變數上回歸的殘差值的關係圖
    4. 綜合圖:influencePlot(mod),座標軸>2或<-2離群點,水平軸>0.2高槓杆值點,圓圈大小與影響成比例
  6. 對模型的改進:迴歸假設診斷後的解決方法
    1. 處理違揹回歸假設
      1. 刪除觀測點
      2. 變數變換
      3. 新增或刪除變數
      4. 使用其他迴歸方法
    2. 刪除觀測點:刪除最大的強影響點或離群點
      1. a[-c(which(row.names(a)==""),which(row.names(a)=="")),],刪除多行
      2. which(row.names(states)==""),找出行號
    3. 變數變換
      1. 當模型違反殘差正態性時,通常對因變數嘗試變換,來估計其次數,summary(car::powerTransform(mod$Response variable))
        1. 檢視Est Power即次數,LR test, lambda = (1) 2.12 1 p=0.1451,而現實中LR test對lambda=1的情況沒有否定,所以還是用1次
      2. 當違反線性時,對X變換,car::boxTidwell(Y~X,data),對模型預測變數的變換來改善線性關係
        1. 檢視p-value和MLE of lambda,H0:預測變數不需要變換
      3. 當違反同方差性時,變換自變數spreadLevelPlot(mod)作圖並提供冪次變換建議
      4. 謹慎對待變數變換,必須對非線性迴歸模型中的變數有現實意義的解釋
    4. 增刪變數:處理多重共線性問題時,去除相關變數
      1. 嶺迴歸:嶺迴歸是一種專用於共線性資料分析的有偏估計迴歸方法,以損失部分資訊、降低精度為代價獲得迴歸係數,對病態資料的擬合要強於最小二乘法
    5. 其他迴歸方法
      1. 離群點、強影響點:穩健迴歸模型
      2. 違背正態性:非引數迴歸模型
      3. 違背線性:非線性迴歸模型
      4. 違背誤差獨立性:時間序列模型或多層次迴歸模型
      5. 違背同方差性:廣義線性模型
  7. 選擇最佳的迴歸模型
    1. 模型比較
      1. anova(mod1,mod2),比較兩個巢狀模型的相似度,巢狀模型即1個mod完全包含在另1個mod裡;沒有顯著不同則選擇簡單的模型
        1. H0:兩個模型沒有顯著不同
      2. AIC赤池資訊準則:AIC(mod1,mod2),比較的模型不需要巢狀
        1. AIC小的模型表示用較少的引數獲得了足夠的擬合度
    2. 變數選擇:當模型較多時,不能比較模型,直接選擇可用變數
      1. 逐步迴歸:每一步加入一個變數,再評估模型,對沒有貢獻的變數再刪除;但並不會將每一個可能的模型進行評估
        1. MASS::stepAIC(mod,direction=""),增減變數的準則為精確AIC準則
      2. 全子集迴歸:所有可能的模型都會被檢驗,leaps::regsubsets(y~x,data,nbest),nbest是n個不同自變數個數的前n個最佳模型
        1. 作圖plot(regsubsets(),scale="adjr2"),adjust R^2,陰影代表包含的預測變數x,垂直座標代表其調整R^2
    3. 最佳的模型必須要有現實意義,理解背景知識有助於模型的開發
  8. 深層次分析
    1. 交叉驗證:一定比例的資料作為訓練樣本,另外的資料作為保留樣本,在保留樣本上做預測,測算出真實的泛化誤差(未知樣本的正確率)
      1. k切法:等分為k個子集,(k-1)個訓練,1個預測,比較k個預測方程的準確率,bootstrap::crossval()
    2. 相對重要性:預測變數的重要性排序
      1. 標準化的迴歸係數:scale()資料標準化(返回矩陣),再進行迴歸(需要資料框),得到標準的迴歸係數,as.data.frame(scale(data))
      2. 相對權重:對所有可能的子模型新增一個預測變數引起的R^2平均增加量的一個近似值,spss中的函式結果是每個預測變數對模型的方差的解釋佔比