迴歸專題-1-線性迴歸基礎
Title: 迴歸專題-1 | 線線性迴歸基礎
導讀
① 線性迴歸
(又稱線性模型),通過一個或者多個預測變數(X)來預測定量結局變數(Y)[1]。
② 目標是建立一個數學公式,將y定義為x變數的函式。統計模型一旦建立,就可以通過對新加入的變數進行預測。
③ 迴歸模型的建立,需要評估估計模型的效能。也就是說,需要知道通過迴歸模型預測新加入的變數的準確性如何,準確性越高,說明該模型的構建是成功的。
- 評價模型預測效能的兩個常用度量值:
均方根誤差
(Root Mean Square Error, RMSE),用來表示模型預測的誤差。也就是觀察值與模型預測的估計值之間的差異是多少,計算公式為:
RMSE值越小,模型越好R的平方
(也可以稱為決定係數),表示的是觀察值和預測值之間的相關係數的平方,R2值越大,模型越好
簡單線性迴歸的學習流程
公式
線性迴歸的數學公式如下:
- 如果有多個預測變數的話,公式則可以寫成
y= b0 + b1*x1 + b2*x2 + ... + bn*xn
:- b0 是截距
- b1,b2,…,bn是迴歸權重或者說是與變數x1,x2,…xn相關的迴歸係數
- e就是誤差(也稱為殘差),y中能被迴歸模型解釋的那一部分方差
- 下面這幅圖很直觀的說明了簡單迴歸模型的特點
- 藍色線使得模型擬合最好
- 截距和斜率(迴歸權重)用綠色表示
- 殘差表示的是每個點到擬合直線的垂直距離
- 可以看到,並不是每個點都落在迴歸線上,有在迴歸線上面或者下面的,總之,剩餘殘差的平均值接近於0。剩餘殘差的平方和稱為
殘差平方和
(Residual Sum of Squares, RSS)。擬合迴歸線周圍的點的平均方差叫做剩餘標準誤
(Residual Standard Error, RSE),也用於評價擬合迴歸模型的總體質量,該值越小說明迴歸線擬合的越好- 因為平均誤差可以認為是等於0,所以結局變數可以近似表示為:
y ~ b0 + b1*x
一般來講,b0和b1一般取RSS為最小值的時候的值。也即是最小二乘法
的原理,或者叫普通最小二乘
- 一旦b0和b1確定下來,那麼就立馬執行對
迴歸係數
的t-檢驗,即迴歸係數是否顯著大於或小於0。非零的迴歸係數說明預測變數與結局變數顯著相關。
載入R包
這裡用到兩個R語言包
- tidyverse用於資料處理和圖形展示
- caret用於機器學習流程
library(tidyverse)
library(caret)
theme_set(theme_bw())
資料準備
- 這裡用到一個現存的資料集
marketing
,通過三大廣告媒體所花費的金額來預測其銷售額 - 隨後我們將資料集隨機分為訓練集(80%的資料用於構建一個迴歸模型)和測試集(20%的資料用來評估模型的效能)。為了獲得可重複的結果,需設定種子
# Load the data,載入資料
data("marketing", package = "datarium")
# Inspect the data,隨機檢視資料
sample_n(marketing, 3)
# Split the data into training and test set,拆分資料
set.seed(123) # 設定種子以獲得可重複結果
training.samples <- marketing$sales %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- marketing[training.samples, ]
test.data <- marketing[-training.samples, ]
計算線性迴歸
- R語言裡的
lm()
函式用於計算線性迴歸模型
快速構建線性迴歸模型
# Build the model
model <- lm(sales ~., data = train.data) # 用訓練集資料構建模型
# Summarize the model
summary(model)
# Make predictions #
predictions <- model %>% predict(test.data) # 用測試集資料預測模型的準確性
# Model performance # 通過上述兩個指標來說明模型的綜合性能
# (a) Prediction error, RMSE
RMSE(predictions, test.data$sales)
# (b) R-square
R2(predictions, test.data$sales)
簡單線性迴歸
- 簡單線性迴歸用於單個預測變數來預測連續的結局變數,這裡先用youtube這個變數來構建簡單線性迴歸模型
model <- lm(sales ~ youtube, data = train.data)
summary(model)$coef
- 結果如下:
- 結果解釋:
- 結果顯示了迴歸係數的估計值(也就是
Estimate
那一列)以及他們的顯著性水平(Pr|t|
那一列)。可以看到截距b0為8.38,youtube的迴歸係數為0.046 - 如此,迴歸方程就可以表示為:scales = 8.38 + 0.046*youtube,通過這個等式,那麼就可以預測新加入的youtube變數
多重線性迴歸
- 多重線性迴歸是簡單線性迴歸的拓展,不同的地方就是
預測變數
可以是多個 - 比如本例中的三個預測變數與結局變數的關係則可以寫成:y = b0 + b1x1 + b2x2 + b3*x3
- 這裡的迴歸係數代表每個預測變數與結局變數的相關。
bj
表示固定其他預測變數後,xj
每增加一個單位,y變化的平均效應
model <- lm(sales ~ youtube + facebook + newspaper,
data = train.data)
summary(model)$coef
- 值得注意的是,當預測變數較多時,迴歸方程可以簡寫為
y ~ .
,這樣就是包括全部的變數,如下所示
model <- lm(sales ~., data = train.data)
summary(model)$coef
- 結果如下
- 結果解釋:
如上結果所示,迴歸係數表展示了beta迴歸西施估計值以及顯著性p值
- 估計值(Estimate):截距b0,以及其它與預測變數相關的beta迴歸係數估計值
- 迴歸係數標準誤(Std.Error):迴歸係數估計值的標準誤,表示迴歸係數的準確性。標準誤越大,迴歸係數的可信度越小
- t統計量(t value):即t-統計量,是用迴歸估計值除以迴歸係數標準誤得到的比值
- P值(Pr(>|t|)):對應於t-統計量的P值,P值越小,估計值越有意義
- 如果有不顯著的預測變數,比如這裡的
newspaper
,說明當固定其它兩個變數之後,newspaper的變化不會顯著的影響結局變數,也就是銷售額。
模型的準確性診斷
一旦模型被確定下來,至少有一個預測變數與結局變數顯著相關,接下里就應該對模型擬合數據的程度進行診斷。這個過程也叫
擬合優度
(goodness-of-fit),線性迴歸擬合的質量可以用下面三個統計量來表示:
- 剩餘標準誤
- R平方值,決定係數(R2)以及校正的R2
- F-統計量
- 剩餘標準誤
RSE在前面已經描述過,RSE越小證明模型擬合的越好。另外一個就是將RSE除以結局變數的平均值可以得到另外一個度量值——估計錯誤率(prediction error rate) - R2和adjust R2
R2的取值範圍在(0,1),它的含義表示結局變數的變化可以被預測變數解釋的比例。在簡單線性迴歸中,R2就是結局變數和預測變數之間的皮爾遜相關係數的平方。而在多重線性迴歸中,R2則表示結局變數和預測變數之間的相關係數。R2值越大,說明模型越好。這裡引入一個adjust R2的概念,因為在多種線性迴歸中,有時候增加變數而使R2值升高是虛假的,所以R2的提高要考慮模型中新增的預測變數的個數 - F-統計量
F-統計量給出了模型的總體意義,評估的是模型中是否至少有一個不為0的迴歸係數,在簡單線性迴歸中,F-統計量就是重複了t檢驗的結果。而在多元線性迴歸中則顯得非常重要,F-統計量越大,往往對應著顯著性的p值
預測
通過測試資料集對模型的效能進行簡單的評估,主要過程如下:
- 對新加入的預測變數進行結局變數的預測
- 通過計算RMSE的值和R2值來評估模型的效能
# Make predictions
predictions <- model %>% predict(test.data)
# Model performance
# (a) Compute the prediction error, RMSE
RMSE(predictions, test.data$sales)
RMSE結果為: ## [1] 1.58
# (b) Compute R-square
R2(predictions, test.data$sales)
R2值為: ## [1] 0.938
上面的結果可知,R2的值是0.93,說明觀察值和預測值之間的相關性非常高,說明線性迴歸擬合度很好。估計誤差值RMSE為1.58,則錯誤率為1.58/mean(test.data$scales)=1.58/17=9.2%,這個結果說明模型擬合的比較好
討論
這篇文章主要對線性迴歸的基礎進行了描述,並且通過例項演示如何去構建一個線性迴歸模型以及通過什麼指標去衡量模型的效能,但是需要注意的是:
- 線性迴歸是基於預測變數和結局變數之間是一種線性關係的假設,這可以通過簡單的散點圖作圖看出,比如下面的方法就畫了youtube因變數和響應變數之間的散點圖
ggplot(marketing, aes(x = youtube, y = sales)) +
geom_point() +
stat_smooth()
參考
[1] James et al. 2014,P. Bruce and Bruce (2017)
[2] http://www.sthda.com/english/articles/40-regression-analysis/165-linear-regression-essentials-in-r/
注:如果我們對文章理解有偏差,非常歡迎大家向我們反饋,我們會認真閱讀並修改,另外有願意加入我們的小團隊的老師和同學可傳送郵件至我們的郵箱:<[email protected]> 祝大家科研順利,生活開心!
想要了解更多內容請訪問我們深度基因網站地址:<http://deepgener.wordpress.com/>