回歸專題-1 | 線線性回歸基礎(chǔ)
導(dǎo)讀
① 線性回歸(又稱線性模型),通過一個或者多個預(yù)測變量(X)來預(yù)測定量結(jié)局變量(Y)[1]。
② 目標是建立一個數(shù)學(xué)公式,將y定義為x變量的函數(shù)。統(tǒng)計模型一旦建立,就可以通過對新加入的變量進行預(yù)測。
③ 回歸模型的建立,需要評估估計模型的性能。也就是說,需要知道通過回歸模型預(yù)測新加入的變量的準確性如何,準確性越高,說明該模型的構(gòu)建是成功的。
- 評價模型預(yù)測性能的兩個常用度量值:
-
均方根誤差(Root Mean Square Error, RMSE),用來表示模型預(yù)測的誤差。也就是觀察值與模型預(yù)測的估計值之間的差異是多少,計算公式為:
圖一 RMSE公式
RMSE值越小,模型越好 -
R的平方(也可以稱為決定系數(shù)),表示的是觀察值和預(yù)測值之間的相關(guān)系數(shù)的平方,R2值越大,模型越好
簡單線性回歸的學(xué)習(xí)流程

公式
線性回歸的數(shù)學(xué)公式如下:

- 如果有多個預(yù)測變量的話,公式則可以寫成
y= b0 + b1*x1 + b2*x2 + ... + bn*xn:- b0 是截距
- b1,b2,..,bn是回歸權(quán)重或者說是與變量x1,x2,...xn相關(guān)的回歸系數(shù)
- e就是誤差(也稱為殘差),y中能被回歸模型解釋的那一部分方差
-
下面這幅圖很直觀的說明了簡單回歸模型的特點
圖四 線性回歸圖形展示- 藍色線使得模型擬合最好
- 截距和斜率(回歸權(quán)重)用綠色表示
- 殘差表示的是每個點到擬合直線的垂直距離
- 可以看到,并不是每個點都落在回歸線上,有在回歸線上面或者下面的,總之,剩余殘差的平均值接近于0。剩余殘差的平方和稱為
殘差平方和(Residual Sum of Squares, RSS)。擬合回歸線周圍的點的平均方差叫做剩余標準誤(Residual Standard Error, RSE),也用于評價擬合回歸模型的總體質(zhì)量,該值越小說明回歸線擬合的越好- 因為平均誤差可以認為是等于0,所以結(jié)局變量可以近似表示為:
y ~ b0 + b1*x
一般來講,b0和b1一般取RSS為最小值的時候的值。也即是最小二乘法的原理,或者叫普通最小二乘- 一旦b0和b1確定下來,那么就立馬執(zhí)行對
回歸系數(shù)的t-檢驗,即回歸系數(shù)是否顯著大于或小于0。非零的回歸系數(shù)說明預(yù)測變量與結(jié)局變量顯著相關(guān)。
加載R包
這里用到兩個R語言包
- tidyverse用于數(shù)據(jù)處理和圖形展示
- caret用于機器學(xué)習(xí)流程
library(tidyverse)
library(caret)
theme_set(theme_bw())
數(shù)據(jù)準備
- 這里用到一個現(xiàn)存的數(shù)據(jù)集
marketing,通過三大廣告媒體所花費的金額來預(yù)測其銷售額 - 隨后我們將數(shù)據(jù)集隨機分為訓(xùn)練集(80%的數(shù)據(jù)用于構(gòu)建一個回歸模型)和測試集(20%的數(shù)據(jù)用來評估模型的性能)。為了獲得可重復(fù)的結(jié)果,需設(shè)定種子
# Load the data,加載數(shù)據(jù)
data("marketing", package = "datarium")
# Inspect the data,隨機查看數(shù)據(jù)
sample_n(marketing, 3)

# Split the data into training and test set,拆分數(shù)據(jù)
set.seed(123) # 設(shè)定種子以獲得可重復(fù)結(jié)果
training.samples <- marketing$sales %>%
createDataPartition(p = 0.8, list = FALSE)
train.data <- marketing[training.samples, ]
test.data <- marketing[-training.samples, ]
計算線性回歸
- R語言里的
lm()函數(shù)用于計算線性回歸模型
快速構(gòu)建線性回歸模型
# Build the model
model <- lm(sales ~., data = train.data) # 用訓(xùn)練集數(shù)據(jù)構(gòu)建模型
# Summarize the model
summary(model)
# Make predictions #
predictions <- model %>% predict(test.data) # 用測試集數(shù)據(jù)預(yù)測模型的準確性
# Model performance # 通過上述兩個指標來說明模型的綜合性能
# (a) Prediction error, RMSE
RMSE(predictions, test.data$sales)
# (b) R-square
R2(predictions, test.data$sales)
簡單線性回歸
- 簡單線性回歸用于單個預(yù)測變量來預(yù)測連續(xù)的結(jié)局變量,這里先用youtube這個變量來構(gòu)建簡單線性回歸模型
model <- lm(sales ~ youtube, data = train.data)
summary(model)$coef
-
結(jié)果如下:
圖六 簡單線性回歸結(jié)果 - 結(jié)果解釋:
- 結(jié)果顯示了回歸系數(shù)的估計值(也就是
Estimate那一列)以及他們的顯著性水平(Pr|t|那一列)??梢钥吹浇鼐郻0為8.38,youtube的回歸系數(shù)為0.046 - 如此,回歸方程就可以表示為:scales = 8.38 + 0.046*youtube,通過這個等式,那么就可以預(yù)測新加入的youtube變量
多重線性回歸
- 多重線性回歸是簡單線性回歸的拓展,不同的地方就是
預(yù)測變量可以是多個 - 比如本例中的三個預(yù)測變量與結(jié)局變量的關(guān)系則可以寫成:y = b0 + b1x1 + b2x2 + b3*x3
- 這里的回歸系數(shù)代表每個預(yù)測變量與結(jié)局變量的相關(guān)。
bj表示固定其他預(yù)測變量后,xj每增加一個單位,y變化的平均效應(yīng)
model <- lm(sales ~ youtube + facebook + newspaper,
data = train.data)
summary(model)$coef
- 值得注意的是,當預(yù)測變量較多時,回歸方程可以簡寫為
y ~ .,這樣就是包括全部的變量,如下所示
model <- lm(sales ~., data = train.data)
summary(model)$coef
-
結(jié)果如下
圖七 多重線性回歸結(jié)果 - 結(jié)果解釋:
如上結(jié)果所示,回歸系數(shù)表展示了beta回歸系數(shù)估計值以及顯著性p值
- 估計值(Estimate):截距b0,以及其它與預(yù)測變量相關(guān)的beta回歸系數(shù)估計值
- 回歸系數(shù)標準誤(Std.Error):回歸系數(shù)估計值的標準誤,表示回歸系數(shù)的準確性。標準誤越大,回歸系數(shù)的可信度越小
- t統(tǒng)計量(t value):即t-統(tǒng)計量,是用回歸估計值除以回歸系數(shù)標準誤得到的比值
- P值(Pr(>|t|)):對應(yīng)于t-統(tǒng)計量的P值,P值越小,估計值越有意義
- 如果有不顯著的預(yù)測變量,比如這里的
newspaper,說明當固定其它兩個變量之后,newspaper的變化不會顯著的影響結(jié)局變量,也就是銷售額。
模型的準確性診斷
一旦模型被確定下來,至少有一個預(yù)測變量與結(jié)局變量顯著相關(guān),接下里就應(yīng)該對模型擬合數(shù)據(jù)的程度進行診斷。這個過程也叫
擬合優(yōu)度(goodness-of-fit),線性回歸擬合的質(zhì)量可以用下面三個統(tǒng)計量來表示:
- 剩余標準誤
- R平方值,決定系數(shù)(R2)以及校正的R2
- F-統(tǒng)計量
- 剩余標準誤
RSE在前面已經(jīng)描述過,RSE越小證明模型擬合的越好。另外一個就是將RSE除以結(jié)局變量的平均值可以得到另外一個度量值——估計錯誤率(prediction error rate) - R2和adjust R2
R2的取值范圍在(0,1),它的含義表示結(jié)局變量的變化可以被預(yù)測變量解釋的比例。在簡單線性回歸中,R2就是結(jié)局變量和預(yù)測變量之間的皮爾遜相關(guān)系數(shù)的平方。而在多重線性回歸中,R2則表示結(jié)局變量和預(yù)測變量之間的相關(guān)系數(shù)。R2值越大,說明模型越好。這里引入一個adjust R2的概念,因為在多種線性回歸中,有時候增加變量而使R2值升高是虛假的,所以R2的提高要考慮模型中添加的預(yù)測變量的個數(shù) - F-統(tǒng)計量
F-統(tǒng)計量給出了模型的總體意義,評估的是模型中是否至少有一個不為0的回歸系數(shù),在簡單線性回歸中,F(xiàn)-統(tǒng)計量就是重復(fù)了t檢驗的結(jié)果。而在多元線性回歸中則顯得非常重要,F(xiàn)-統(tǒng)計量越大,往往對應(yīng)著顯著性的p值
預(yù)測
通過測試數(shù)據(jù)集對模型的性能進行簡單的評估,主要過程如下:
- 對新加入的預(yù)測變量進行結(jié)局變量的預(yù)測
- 通過計算RMSE的值和R2值來評估模型的性能
# Make predictions
predictions <- model %>% predict(test.data)
# Model performance
# (a) Compute the prediction error, RMSE
RMSE(predictions, test.data$sales)
RMSE結(jié)果為: ## [1] 1.58
# (b) Compute R-square
R2(predictions, test.data$sales)
R2值為: ## [1] 0.938
上面的結(jié)果可知,R2的值是0.93,說明觀察值和預(yù)測值之間的相關(guān)性非常高,說明線性回歸擬合度很好。估計誤差值RMSE為1.58,則錯誤率為1.58/mean(test.data$scales)=1.58/17=9.2%,這個結(jié)果說明模型擬合的比較好
討論
這篇文章主要對線性回歸的基礎(chǔ)進行了描述,并且通過實例演示如何去構(gòu)建一個線性回歸模型以及通過什么指標去衡量模型的性能,但是需要注意的是:
- 線性回歸是基于預(yù)測變量和結(jié)局變量之間是一種線性關(guān)系的假設(shè),這可以通過簡單的散點圖作圖看出,比如下面的方法就畫了youtube因變量和響應(yīng)變量之間的散點圖
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/



