迴歸分析指用一個或多個預測變量(也稱自變量或解釋變量)來預測響應變量(也稱因變量、效標變量或結果變量)的方法。
迴歸包括簡單線性、多項式、多元線性、多變量、Logistic迴歸、泊松、時間序列、非線性、非參數、穩健、Cox比例風險迴歸等多種形式。
下文主要介紹普通最小二乘(OLS)迴歸法,包括簡單線性迴歸、多項式迴歸和多元線性迴歸。
1 OLS迴歸
條件:減小因變量的真實值與預測值的差值來獲取模型參數,即殘差平方和最小。
爲了能夠恰當地解釋OLS模型的係數,數據必須滿足以下統計假設:
(1)正態性。對於固定的自變量值,因變量值成正態分佈
(2)獨立性。Yi值之間相互獨立。
(3)線性。因變量與自變量之間爲線性相關。
(4)同方差性。因變量的方差不隨自變量的水平不同而變化。
1 用lm()擬合迴歸模型
格式:myfit <-lm(formula, data)
其中,formula指要擬合的模型形式,data是一個數據框,包含了用於擬合模型的數據。
表達式(formula)形式如:Y~X1+X2+…+Xk
~左邊爲因變量,右邊爲各個自變量,自變量之間用+符號分隔,表達式中還有其他符號
對擬合線性模型非常有用的其他函數
函數 | 用途 |
summary() | 展示擬合模型的詳細結果 |
coefficients() | 列出擬合模型的模型參數(截距項和斜率) |
confint() | 提供模型參數的置信區間(默認95%) |
fitted() | 列出擬合模型的預測值 |
residuals() | 列出擬合模型的殘差值 |
anova() | 生成一個擬合模型的方差分析表,或者比較兩個或更多擬合模型的方差分析表 |
vcov() | 列出模型參數的協方差矩陣 |
AIC() | 輸出赤池信息統計量 |
plot() | 生成評價擬合模型的診斷圖 |
predict() | 用擬合模型對新的數據集預測響應變量值 |
2 簡單線性迴歸
R平方項(0.991)表明模型可以解釋體重99.1%的方差,也是實際和預測值之間的相關係數
殘差標準誤(1.1525)則可認爲是模型用身高預測體重的平均誤差
F統計量檢驗所有的自變量預測因變量是否都在某個機率水平之上。對簡單線性迴歸來說,只有一個自變量,此時F檢驗等同於身高迴歸係數的t檢驗。
3 多項式迴歸
此時代碼可以寫爲:fit2 <- lm(weight ~ height + I(height^2), data = women)
注:多項式迴歸仍是線性迴歸
car包中的scatterplot()函數,既提供散點圖、線性擬合曲線和平滑擬合(loess)曲線,還在相應邊界展示了每個變量的箱線圖。
4 多元線性迴歸
當自變量不止一個時,簡單線性迴歸就變爲多元線性迴歸。
多元迴歸分析中,第一步最好檢查下變量間的相關性。——cor()函數
scatterplotMatrix ( )函數默認在非對角區域繪製變量間的散點圖,並添加平滑(loess)和線性擬合曲線。對角線區域繪製每個變量的密度圖和軸須圖。
此時代碼例子爲:fit <- lm(Murder ~ Population + Illiteracy + Income + Frost, data = states)
當變量係數沒有顯著不爲0(p值較大時),表明當控制其他變量不變時,該自變量與因變量不呈線性相關。
5 有交互項的多元線性迴歸
此時代碼例子爲:fit <- lm(mpg ~ hp + wt + hp:wt, data = mtcars)
若兩個自變量的交互項顯著,則說明因變量與其中一個自變量的關係依賴於另一個自變量。
用effects包中的effect()函數,可以用圖形展示交互項結果(即當一個變量取某個固定的值時,另一個自變量變化時因變量的變化),格式爲:
plot(effect(term, mod, xlevels), multiline =TRUE)
term即模型要畫的項,mod爲通過lm()擬合的模型,xlevels是一個列表,指定變量要設定的常量值,multiline = TRUE選項表示添加相應直線。
例:plot(effect("hp:wt", fit, list(wt = c(2.2, 3.2, 4.2))), multiline = TRUE)
2 迴歸診斷
雖然summary()函數對模型有了整體的描述,但是沒有提供關於模型在多大程度上滿足統計假設的任何信息,即沒有任何輸出告訴你模型是否合適。迴歸診斷技術提供了評價迴歸模型適用性的必要工具,幫助發現並糾正問題。
R中基礎包中提供了函數的標準方法,car包中提供改進了的新方法。
1 標準方法
最常用方法:對lm()函數返回的對象使用plot函數,可以生成評價模型擬合情況的四幅圖形
Q-Q圖對應正態性檢驗
Residuals vs Fitted(殘差圖與擬合圖)對應線性假設,若圖中有曲線關係,則可能需要對迴歸模型加二次項。
Scale-Location Graph(位置尺度圖)對應同方差性。若水平線周圍的點隨機分佈,則滿足假設。
Residual vs Leverage(殘差與槓桿圖)提供可能關注的單個觀測點。從圖上可以鑑別出離羣點、高槓杆點和強影響點。
2 改進的方法
car包提供了大量函數,大大增強了擬合和評價迴歸模型的能力。gvlma包也提供了對所有線性模型假設進行檢驗的方法。以下是以car包爲例。
(1)正態性
採用qqplot函數
(2)誤差的獨立性
car包提供了一個可做Durbin-Watson檢驗的函數,能夠檢測誤差的序列相關性。對應函數爲durbinwatsonTest()。
(3)線性
通過成分殘差圖可以觀察因變量與自變量之間是否呈線性關係。對應car包中crPlot函數繪製。
(4)同方差性
Car包中提高兩個有用函數。
ncvTest()函數生成一個計分檢驗,零假設爲誤差方差不變,備擇假設爲誤差方差隨着擬合值水平的變化而變化。若檢驗顯著,則說明存在異方差性(誤差方差不恆定)。
spreadLevelPlot()函數創建一個添加了最佳擬合曲線的散點圖,展示標準化殘差絕對值
與擬合值的關係。
3 線性模型假設的綜合驗證
gvlama包中的gvlama()函數,除了能對線性模型假設進行綜合驗證,同時還能做偏斜度、峯度和異方差性的評價。
4 多重共線性
多重共線性會導致模型參數的置信區間過大,使單個係數解釋起來很困難。多重共線性可用統計量VIF(Variance Inflation Factor,方差膨脹因子)進行檢測。VIF的平方根表示變量回歸參數的置信區間能膨脹爲與模型無關的預測變量的程度
Car包中vif()函數提供VIF值。一般原則下,√vif >2就表明存在多重共線性問題。
3 異常觀測值
1 離羣點
離羣點指模型中預測效果不佳的觀測點。它們通常有很大的、或正或負的殘差(真實值-預測值)。
car包也提供了一種離羣點的統計檢驗方法。outlierTest()函數可以求得最大標準化殘差絕對值Bonferroni調整後的p值。注意,該函數只是根據單個最大(或正或負)殘差值的顯著性來判斷是否有離羣點。若不顯著,則說明數據集中沒有離羣點;若顯著,則你必須刪除該離羣點,然後再檢驗是否還有其他離羣點存在。
2 高槓杆值
高槓杆值觀測點,即是與其他預測變量有關的離羣點。換句話說,它們是由許多異常的預測
變量值組合起來的,與響應變量值沒有關係。高槓杆值的觀測點可通過帽子統計量(hat statistic)判斷。對於一個給定的數據集,帽子均值爲p/n,其中p 是模型估計的參數數目(包含截距項),n 是樣本量。
3 強影響點
強影響點,即對模型參數估計值影響有些比例失衡的點。例如,若移除模型的一個觀測點時模型會發生巨大的改變,那麼你就需要檢測一下數據中是否存在強影響點了。有兩種方法可以檢測強影響點:Cook距離,或稱D統計量,以及變量添加圖(added variable plot)。
4 改進措施
經過迴歸診斷髮現後,處理違揹回歸假設的方法有:
(1)刪除觀測點
(2)變量變換
(3)添加或刪除變量
(4)使用其他迴歸方法
5 選擇“最佳”的迴歸模型
1 模型比較
基礎安裝包中的anova()函數可以比較嵌套模型的擬合優度。
2 變量選擇
從大量候選變量中選擇最終的預測變量有以下兩種流行的方法:逐步迴歸法(stepwise
method)和全子集迴歸(all-subsets regression)。
附錄:
R表達式中常用符號
符號 | 用途 |
~ | 分隔符號,左邊爲響應變量,右邊爲解釋變量。例如,要通過x、z和w預測y,代碼爲y ~ x + z + w |
+ | 分隔預測變量 |
: | 表示預測變量的交互項。例如,要通過x、z及x與z的交互項預測y,代碼爲y ~ x + z + x:z |
* | 表示所有可能交互項的簡潔方式。代碼y~ x * z * w可展開爲y ~ x + z + w + x:z + x:w + z:w +x:z:w |
^ | 表示交互項達到某個次數。代碼y ~ (x + z + w)^2可展開爲y ~ x + z + w + x:z + x:w + z:w |
. | 表示包含除因變量外的所有變量。例如,若一個數據框包含變量x、y、z和w,代碼y ~ .可展開爲y ~ x +z + w |
- | 減號,表示從等式中移除某個變量。例如,y ~ (x + z + w)^2 – x:w可展開爲y ~ x + z + w +x:z + z:w |
-1 | 刪除截距項。例如,表達式y ~ x - 1擬合y在x上的迴歸,並強制直線通過原點 |
I() | 從算術的角度來解釋括號中的元素。例如,y ~ x + (z + w)^2將展開爲y ~ x + z + w + z:w。相反, 代碼y~ x + I((z + w)^2)將展開爲y ~ x + h, h是一個由z和w的平方和創建的新變量 |
function | 可以在表達式中用的數學函數。例如,log(y) ~ x + z + w表示通過x、z和w來預測log(y) |