異常觀測值

異常點包括:離群點,高槓桿值點和強影響點

  • 離群點:

模型預測效果不佳的觀測點,它們通常有很大的、或正或負的殘差(Yi–?i)。

正的殘差說明模型低估了響應值,負的殘差則說明高估了響應值。在Q-Q圖,落在置信區間帶外的點即可被認為是離群點。另外一個粗糙的判斷準則:標準化殘差值大於2或者小於–2的點可能是離群點,需要特別關注。

library(car)states <- as.data.frame(state.x77[,c("Murder", "Population", "Illiteracy", "Income", "Frost")])fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data=states)outlierTest(fit)

run result:

rstudent unadjusted p-value Bonferonni pNevada 3.542929 0.00095088 0.047544

可以求得最大標準化殘差絕對值Bonferroni調整後的p值:0.047,被判定為離群點。

該函數只是根據單個最大(或正或負)殘差值的顯著性來判斷是否有離群點。若不顯著,則說明數據集中沒有離群點;若顯著,則你必須刪除該離群點,然後再檢驗是否還有其他離群點存在。如何判斷顯著?(p-value,如果這個值大於0.05則H0成立,否則H1成立)

  • 高槓桿值點

即與其他預測變數有關的離群點。換句話說,它們是由許多異常的預測變數值組合起來的,與響應變數值沒有關係。高槓桿值的觀測點可通過帽子統計量(hat statistic)判斷。對於一個給定的數據集,帽子均值p/n,其中p是模型估計的參數數目(包含截距項),n是樣本量。一般來說,若觀測點的帽子值大於帽子均值的2或3倍,就可以認定為高槓桿值點。

code實現:#離群點library(car)outlierTest(fit)# Identifying high leverage pointshat.plot <- function(fit) { p <- length(coefficients(fit))#coefficients 列出擬合模型的模型參數,p為參數的數目 n <- length(fitted(fit))#fitted列出擬合模型的預測值 plot(hatvalues(fit), main="Index Plot of Hat Values")#hatvalues:帽值 abline(h=c(2,3)*p/n, col="red", lty=2)#h=the y-value(s) for horizontal line(s) identify(1:n, hatvalues(fit), names(hatvalues(fit)))#identify reads the position of the graphics pointer when the (first) mouse button is pressed}hat.plot(fit)

運行的結果:

水平線標註的即帽子均值2倍和3倍的位置(h的定義)

定位函數(locator function)能以交互模式繪圖:單擊感興趣的點,然後進行標註,停止交互時,用戶可按Esc鍵退出。

此圖中,可以看到Alaska和California非常異常。

  • 強影響點

對模型參數估計值影響有些比例失衡的點,有兩種方法可以檢測強影響點:Cook距離,或稱D統計量,以及變數添加圖(added variable plot)。一般來說,Cook』s D值大於4/(n–k–1),則表明它是強影響點,其中n為樣本量大小,k是預測變數數目。

code

# identify D values > 4/(n-k-1) cutoff <- 4/(nrow(states)-length(fit$coefficients)-2)plot(fit, which=4, cook.levels=cutoff)abline(h=cutoff, lty=2, col="red")

run result:

通過圖形可以判斷Alaska、HawaiiNevada是強影響點。若刪除這些點,將會導致回歸模型

截距項和斜率發生顯著變化。

注意,雖然該圖對搜尋強影響點很有用,但我逐漸發現以1為分割點比4/(n–k–1)更具一般性。若設定D=1為判別標準,則數據集中沒有點看起來像是強影響點。

缺陷:Cook』s D圖有助於鑒彆強影響點,但是並不提供關於這些點如何影響模型的信息。

所以引入:變數添加圖

即對於每個預測變數Xk,繪製Xk在其他k–1個預測變數上回歸的殘差值相對於響應變數其他k–1個預測變數上回歸的殘差值的關係圖。

code

# Added variable plots# add id.method="identify" to interactively identify pointslibrary(car)avPlots(fit, ask=FALSE, id.method="identify")

run result

圖中的直線表示相應預測變數的實際回歸係數。你可以想像刪除某些強影響點後直線的改

變,以此來估計它的影響效果。例如,來看左下角的圖(「Murder | others」 vs. 「Income | others」),若刪除點Alaska,直線將往負向移動。事實上,刪除Alaska,Income的回歸係數將會從0.000 06變為–0.000 85。

influencePlot()函數,你還可以將離群點、槓桿值和強影響點的信息整合到一幅圖形中.

code

# Influence Plotlibrary(car)influencePlot(fit, id.method="identify", main="Influence Plot", sub="Circle size is proportial to Cooks Distance" )

run result:

縱坐標超過+2或小於–2的州可被認為是離群點,水平軸超過0.2或0.3的州有高槓桿值(通常為預測值的組合)。圓圈大小與影響成比例,圓圈很大的點可能是對模型參數的估計造成的不成比例影響的強影響點.


推薦閱讀:

TAG:R編程語言 | 回歸分析 |