天天看點

【回歸分析】[6]--殘差分析

【回歸分析】[6]--殘差分析

  在這一節,我們讨論一下關于殘差的問題。主要是為了驗證四個假設。  

  1. 關于模型形式的假定:模型關于參數是線性的-- 通過觀察Y-- X的散點圖;

  2. 關于誤差的假定:a.方差服從正太分布    b.均值為0     c.方差相同      d.誤差互相獨立-- pp圖;

  3. 關于預測變量的假定 : a.預測變量是非随機的    b.資料是無誤差的  c.預測變量線性無關;

  4. 關于觀測的假定 : 影響力相同;

  這一次,我們就要之前的一個例子來做解釋。Mathematica資料處理(1)--安斯庫母四重奏

datafrash = {{{10., 8.04}, {8., 6.95}, {13., 7.58}, {9., 8.81}, {11., 
     8.33}, {14., 9.96}, {6., 7.24}, {4., 4.26}, {12., 10.84}, {7., 
     4.82}, {5., 5.68}}, {{10., 9.14}, {8., 8.14}, {13., 8.74}, {9., 
     8.77}, {11., 9.26}, {14., 8.1}, {6., 6.13}, {4., 3.1}, {12., 
     9.13}, {7., 7.26}, {5., 4.74}}, {{10., 7.46}, {8., 6.77}, {13., 
     12.74}, {9., 7.11}, {11., 7.81}, {14., 8.84}, {6., 6.08}, {4., 
     5.39}, {12., 8.15}, {7., 6.42}, {5., 5.73}}, {{8., 6.58}, {8., 
     5.76}, {8., 7.71}, {8., 8.84}, {8., 8.47}, {8., 7.04}, {8., 
     5.25}, {19., 12.5}, {8., 5.56}, {8., 7.91}, {8., 6.89}}};
           

這個是資料

data = SortBy[datafrash[[#]], First] & /@ {1, 2, 3, 4};
lm = LinearModelFit[#, x, x] & /@ data
           

我們對四組資料一起處理

Show[ListPlot[data[[#]], ImageSize -> Medium], 
   Plot[lm[[#]][x], {x, 0, 20}, ImageSize -> Medium]] & /@ {1, 2, 3,4}
           

先畫出拟合的效果圖

【回歸分析】[6]--殘差分析

我們可以認為 對于2--要能從殘差看出y-x不成線性關系 對于3--倒數第二個點是強影響點 對于4--最後一個點稱為強影響點(杠杆值大,殘差小)

看一下三種殘差圖-- 殘差,标準化殘差,删除單個誤差的殘差

(*殘差,标準化殘差,删除單個誤差的殘差*)
cc = lm[[#]]["FitResiduals"] & /@ {1, 2, 3, 4};
Row[ListPlot[#, ImageSize -> Medium, Filling -> Axis] & /@lm[[#]][{"FitResiduals", "StandardizedResiduals","StudentizedResiduals"}]] & /@ {1, 2, 3, 4}
           

隻有當 殘差圖是雜亂的,沒有規律的,才說明殘差符合正态分布

【回歸分析】[6]--殘差分析

可以看到除了第一個,其他三個的殘差圖都有一定的規律。 直覺看拟合的圖也是能看出問題的

接下來,我們來檢驗殘差是否符合正太分布--pp圖和qq圖

Row[{ProbabilityPlot[cc[[#]], PlotLabel -> "pp圖", PlotRange -> All, ImageSize -> Medium],QuantilePlot[cc[[#]], PlotLabel -> "qq圖", PlotRange -> All,ImageSize -> Medium]}] & /@ {1, 2, 3, 4}
           
【回歸分析】[6]--殘差分析
【回歸分析】[6]--殘差分析

接下來要看一下 杠杆值和殘差的大小,有兩種方法--庫克距離和Hadi‘s距離,可以看到影響力的大小

ListPlot[lm[[#]]["CookDistances"], Filling -> Axis,ImageSize -> Medium, PlotRange -> Full] & /@ {1, 2, 3, 4}
           
【回歸分析】[6]--殘差分析

那些較大值對應的點都是有問題的點,可以看到,用庫克距離成功找到了第三張圖的第10個點和第四張圖的第十一個點

下面我們看一下Hadi‘s距離

hat = lm[[#]]["HatDiagonal"] & /@ {1, 2, 3, 4};
cc = lm[[#]]["FitResiduals"] & /@ {1, 2, 3, 4};
degreeoffree = 
  lm[[#]]["ANOVATableDegreesOfFreedom"][[-3]] & /@ {1, 2, 3, 4};
SSE = lm[[#]]["ANOVATableSumsOfSquares"][[-2]] & /@ {1, 2, 3, 4};
hadi  = hat[[#]]/(1 - 
        hat[[#]]) + ((degreeoffree[[#]] + 1)/(1 - 
          hat[[#]]))*((cc[[#]]^2)/(SSE[[#]] - cc[[#]]^2)) & /@ {1, 2, 
    3, 4};
ListPlot[hadi[[#]], Filling -> Axis, ImageSize -> Medium, 
   PlotRange -> All] & /@ {1, 2, 3, 4}
           
【回歸分析】[6]--殘差分析

同樣可以看到異常點。下面我們把異常點删選出來

(*找到異常點的位置*)
Position[hadi, _?(# > 1 &)]
           
【回歸分析】[6]--殘差分析
(*提取資料點*) 
Extract[data, %]
           
【回歸分析】[6]--殘差分析

這樣就可以找到異常點了,但是,最好的方法還是看殘差圖

以上,所有 2016/10/30

轉載于:https://www.cnblogs.com/wmn7q/p/7265546.html