楊育晟(Peter Yang)

嗨, 我叫育晟, 部落格文章主題包含了程式設計、財務金融及投資...等等,內容多是記錄一些學習的過程和心得,任何想法都歡迎留言一起討論。



Email: ycy.tai@gmail.com
LinkedIn: Peter Yang
Github: ycytai

認識迴歸模型(regression model)

什麼是迴歸模型

迴歸模型是最被廣泛使用於探究因果關係的模型

以下為一個常見的線性模型(linear regression)示意

$$ y = \alpha + \beta x + e $$

在等號左方的 $y$ 即為被解釋變數(depened varible)或作應變數,$x$ 為解釋變數(independ varible)或作自變數。

上述示意的模型中,使用者感興趣的是 $x$ 對於 $y$ 的影響,例如學歷($x$)對於薪資 ($y$),或是營業收入($x$) 對於股票報酬率 ($y$)。

而等號右方的其他符號分別是 $\alpha$ 為截距(intercept), 為估計係數(slope coefficient),$e$ 為殘差(error term)。

那迴歸模型是如何去觀察兩者$(x, y)$間的因果關係呢?

主要有三種估計方法

  1. 最小平方法(Ordinary Least Square, OLS)
  2. 最大概似法(Maximum Likelihood Estimation, MLE)
  3. 動差法(Method of Moments)

下方使用的是最小平方法

最小平方法的核心概念就是regression to mean,透過變異量的解釋來觀察模型的配飾程度

透過觀察$y$變數和本身平均值($\bar{y}$)間的差異,也就是$y$的變異量,和$x$變異量之間的關係,可以透過對觀察值和平均數之間的差距來找到一條最棒的模型,至於 $\alpha$ 和 $\beta$的計算公式直接寫在下頭,推導的部份幾乎所有的統計教科書都有

$$ \beta = \frac{S_{xy}}{S_{xx}}\quad $$

$$ \alpha = \bar{y}- \beta \bar{x} $$

$S_{xy}$ 為X和Y的共變異數(covariance), $S_{xx}$ 為X的變異數(variance),公式如下,等等在實作中來用Excel驗證答案是否跟R跑出來的一樣

$$ S_{xy} =\frac{\sum_{i=0}^n (x-\bar{x})(y-\bar{y})}{n-1}\quad $$

$$ S_{xx} =\frac{\sum_{i=0}^n (x-\bar{x})^2}{n-1}\quad $$


範例實作

simple-regression.csv

簡單迴歸的範例檔案在上面的連結中,內容為學生的統計考試成績和花費在統計上的唸書時間,我們感興趣的主題是,讀書時間和成績之間的關係,這時讀書時間就是X,也就是自變數,而成績則是Y,即應變數,接下來將透過簡單迴歸進行分析

首先先讀取資料,因為表頭有中文的關係才在函式中加上encoding,讓軟體辨識,不然中文會變成亂碼,接著看看前六筆資料

library(readr)
data = read.csv('simple-regression.csv', encoding = "ASCII")
head(data)

  成績 讀書時間
1   90       14
2   86       10
3   96       11
4   95       14
5   96        8
6   91        8

然後將表頭更名成英文,方便操作

colnames(data) = c('score','hours')

接著進行迴歸分析並且印出統計結果

model <- lm(score ~ hours, data = data)
summary(model)

估計結果

######## 以下為統計結果 #######

Call:
lm(formula = score ~ hours, data = data)

Residuals:
     Min       1Q   Median       3Q      Max
-19.0208  -4.2346   0.8714   4.8114  13.6753

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept)  72.7169     2.4706  29.433  < 2e-16 ***
hours         1.5760     0.2528   6.235  1.1e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 7.378 on 48 degrees of freedom
Multiple R-squared:  0.4475,	Adjusted R-squared:  0.436
F-statistic: 38.88 on 1 and 48 DF,  p-value: 1.095e-07

一般在做統計題時會有查表的需要,看統計結果是否顯著,通常在比較正規的統計報告中會從設定假說開始,然後確認顯著水準(一般都用5%),但這邊的範例簡化了實驗過程 ,讓軟體跑出來後可以直接看P值解讀。

如果小於0.05的話便認定影響是顯著的,而截距和讀書時間(hours)的P值後面都打了三個星號(*),星號多寡代表的即是顯著程度的不同,分別代表的顯著水準在 Signif. codes那欄有寫,都有顯著的情形下,統計結果可以解讀作

數據解讀

  • 當花在統記的讀書時間增加 1 單位時,統計考試成績會相對增加約 1.58 單位
  • 當沒有花任何時間讀統計時,會有約 72.72 的成績

寫單位的原因是比較通用的緣故,如果說手邊拿到的資料並不曉得單位是什麼,例如這份範例檔案有特別標明讀書時間是小時,但如果沒特別註明,說不定是天或其它的時間單位也有可能。

迴歸模型視覺化

因此直接使用單位解釋是比較保險的用法。 再來看看圖畫出來會是如何

library(ggpubr)
theme_set(theme_pubr())
ggplot(data, aes(hours, score)) +
  geom_point() +
  stat_smooth(method = lm)

迴歸模型數學表示

上圖中的黑點就是一個X對應一個Y,而中間的藍色線就是估計出來的結果,也就是模型,如果寫成數學表達的話就會如下面所示

$$ score = 72.7169 + 1.5760 hours $$

透過代入不同的x得到的y,所連接起來的資料就是那條藍色線,而黑點和藍線之間就是無法解釋的部份,考試成績無法被讀書時間這個變數所解釋的部份,也就是殘差

後記

驗算.xlsx

學會解讀報表和使用R語言進行迴歸後,用Excel驗算看看R語言的估計結果,如果說不懂得統計軟體計算的原理,而直接使用的話,總會有些心虛的感覺,因此利用Excel來套入公式計算出來。

檔案在上面連結中,驗算出來的結果皆和R語言相同,因此當未來在使用時,便能夠瞭解係數是如何估計出來,就不會因為不了解來由而用得不踏實了

參考資料

Simple Linear Regression in R

Tags:
# regression
# statistic
# model
# R