先說殘差圖究竟是什么鬼。
殘差圖是指以殘差為縱坐標,以任何其他指定的量為橫坐標的散點圖。(上圖僅是殘差的示意圖,非殘差圖,殘差圖可見下文)
用普通最小二乘法(OLS)做回歸分析的人都知道,回歸分析后的結果一定要用殘差圖(residual plots)來檢查,以驗證你的模型。你有沒有想過這究竟是為什么?殘差圖又究竟是怎么看的呢?
這背后當然有數學上的原因,但是這里將著重于聊聊概念上的理解。從根本上說,隨機性(randomness)和不可預測性(unpredictability)是任何回歸模型的關鍵組成部分,如果你沒有考慮到這兩點,那么你的模型就不可信了,甚至說是無效的。
為什么這么說呢?首先,對于一個有效的回歸模型來說,可以細分定義出兩個基本組成部分:
Response =(Constant + Predictors)+ Error
我想說的是另一種說法,那就是:
響應(Response) = 確定性(Deterministic) + 隨機性(Stochastic)
(有時候真是不得不吐槽下,畢竟是外國人發明的現代科學,中文翻譯過來難眠有混淆視聽之嫌,學術詞匯的理解還是看英文更能清晰本質,一會就會聊到Stochastic就明白為什么這么說)
確定性部分(The Deterministic Portion)
為了完整,先提一下Deterministic這部分。在預測模型中,該部分是由關于預測自變量的函數組成,其中包含了回歸模型中所有可解釋、可預測的信息。
隨機誤差(The Stochastic Error)
Stochastic 這個詞很牛逼,其不僅蘊含著隨機性(random),還有不可預測性(unpredictable)。這是很重要的兩點,往往很多朋友都以為有隨機性的特點就夠了,其實不然。這兩點放在一起,就是在告訴我們回歸模型下的預測值和觀測值之間的差異必須是隨機不可預測的。換句話說,在誤差(error)中不應該含有任何可解釋、可預測的信息。
模型中的確定性部分應該是可以很好的解釋或預測任何現實世界中固有的隨機響應。如果你在隨機誤差中發現有可解釋的、可預測的信息,那就說明你的預測模型缺少了些可預測信息。那么殘差圖(residual plots)就可以幫助你檢查是否如此了!
小注:回歸殘差其實是真實誤差(ture error)的估計,就好比回歸系數是真實母體系數(ture population coefficients)的估計。
殘差圖(Residual Plots)
我們可以用殘差圖來估計觀察或預測到的誤差error(殘差residuals)與隨機誤差(stochastic error)是否一致。用一個丟骰子的例子最好理解了。當你丟出去一個六面的骰子時,你不應該能夠預測得到哪面點數向上。然而,你卻可以評估在一系列投擲后,正面向上的數字是否遵循一個隨機模式,你自己心中就會想象出一個隨機散布的殘差圖。如果,有人背著你對骰子做了點手腳,讓六點更頻繁的出現向上,這時你心中的殘差圖看上去就似乎有規律可循,從而不得不修改心中的模型,讓你狐疑骰子一定有問題。
相同的原則也適用于回歸模型。你不應該能夠預測任何給定的觀察或預測結果的錯誤(或者說差別)。你需要確定殘差是否與隨機誤差相互呈現一致性,就像丟骰子一樣,殘差若整體呈現“很古怪”的模式,你就需要回頭修改你的回歸模型了。上面“古怪”究竟怎么看呢?看下文。
話說,OLS回歸模型的隨機誤差到底是什么樣子的呢?首先,殘差不應該成片的很高或很低,而是在擬合值的范圍內,殘差應該以0為中心。換句話說,模型的擬合應該平均散布在被擬合值點附近。而且,在OLS理論中,假設隨機誤差產生的是正態分布的殘差。因此,殘差應該是以對稱的模式,并且在整個擬合范圍內具有恒定均勻的擴散,如下圖python代碼和繪圖:
%matplotlib inline
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
# 給任務單獨分配隨機種子
np.random.seed(sum(map(ord
, "anscombe")))
import seaborn as sns
anscombe = sns.load_dataset("anscombe")
sns.residplot(x="x", y="y"
, data=anscombe.query("dataset == 'I'")
, scatter_kws={"s": 80})
這是用Seaborn畫的美圖。擬合的好,就是0均值的白噪聲分布$N(0,\sigma^2)$,不含任何人為模態。
下面來看一個有問題的殘差圖。請一定要記住,殘差不應該包含任何可預測的信息。
sns.residplot(x="x", y="y"
, data=anscombe.query("dataset == 'II'")
, scatter_kws={"s": 80})
在上圖中,你就可以根據擬合值來預測殘差的非零值。例如,擬合值為9的預期殘差為正值,而5和13的擬合值具有負的預期殘差。
殘差中的非隨機模式表明模型的確定部分(預測變量)沒有捕獲一些“泄露”到殘差中的一些可解釋/可預測信息。該圖表明模型幾種沒法解釋的可能性,可能性包括:
- 一個缺失的變量
- 模型缺少一個變量的高階項來解釋曲率
- 模型缺少在已經存在的項之間的相互作用項(交叉項)
由此來回溯去修改模型,以期望修改后的殘差圖是理想中的殘差圖。
除了上述之外,還有兩種預測信息會潛入到了殘差中的方式:
- 殘差不應該與另外的變量有所相關。如果你可以用另一個變量預測出此殘差圖,那么該變量就應該考慮到你的模型當中。那么就可以通過繪制其他變量的殘差圖,來考察這個問題。
- 相鄰殘差(Adjacent residuals)不應該相互關聯(殘差的自相關性)。如果你可以使用一個殘差來預測得到下一個殘差,則說明存在一些模型還未捕捉到的可預測信息。通常來說,這種情況涉及時間有序的觀察預測。例子就不舉了。
綜上,若非要一句話小結,那就是要留意兩個細節:正確殘差圖不僅要體現出隨機性(random),還要體現不可預測性(unpredictable)即可。
以上。
Ref: