STATA 的線性迴歸分析
利用 STATA 做量化實證研究很簡單,你只要會 reg y x1 x2
就夠了(開玩笑的)。這一章節會談到在 STATA 上執行計量方法(如:線性迴歸、Panel Data Model 等)、相關的檢定以及輸出結果。然而,我重點還是會放在 STATA 的操作與研究時的應用場景,統計或計量的概念只會稍微提到。最 後強調一下:對量化研究而言,STATA 上的操作終究只是工具而已,有意識地了解自己在估計什麼,有邏輯地選擇計量方法與詮釋結果,比起跑了幾百幾千條迴歸更重要。
線性迴歸分析
淺談迴歸
學過統計的人想必對線性迴歸(Linear Regression)不陌生,在開始談 STATA 上線性迴歸的操作時,不妨先想想看線性迴歸是什麼?
- 線性迴歸是一種以極小化 Mean Square Error(MSE)的方式來 fit data。
- 在某些假設之下,線性迴歸的估計值可以「一致地」估計出我們所想像的 X 與 Y 的關係(迴歸參數)。
- 從幾何與線性代數上看來,迴歸不過是把向量
y
(長度為 n),投影到樣本資料矩陣X_{n,k}
的 k 維欄空間上。 - 最後,在 STATA 跑迴歸只要
reg <y> <x_list>, <options>
即可。其中的 <y> 是依變數,<x_list> 則是自變數。
線性迴歸指令:估計選項、類別變數、交乘項
一般來說, reg
指令基本上沒什麼困難,但我們仍有一些推論 (inference)或檢定(hypothese test)上的設定可以調整,像是使用 robust standard error 來處理變異數不齊一的問題。以下條列一些說明:
- 在計算估計值
b
的標準誤時,optionrobust
或r
考慮到了誤差項 (error term)變異數不齊一的情形,而 optioncluster(<var>)
則考慮了同<var>
的樣本點內(比如說同個班級或是 Panel Data 中的同個人),誤差項相關的情形。 - Option
, noconstant
可以忽略掉迴歸中的常數項。請注意,在沒有常數項的情形下,R² 的定義會和平常不太一樣。 - reg 基本上會自動處理共線性(collinearity),也就是會自動 omit 掉多餘的變數。
另外,有時候我們的 <x_list>
需要包含類別變數,一般來說我們要對每個類別生成一個二元變數(dummy),並丟掉一個類別作為 base group 以避免共線性(dummy trap)。不過在 STATA 中,其實可以很方便地利用 「factor variable」的方式放入 reg 中,而不需要花時間生成變數。下列說明:
i.<var>
又稱 factor variable。在<x_list>
之中放入i.<var>
等同於將<var>
類別化成 dummies 後放入迴歸式。當然,STATA 會自動幫我們挑個類別作為 base group 以避免 dummy trap。¹- 作為 factor variable 的變數不能是 string,因此需要先
destring
或encode
。
最後,我們的 <x_list>
也可能包含變數間的交乘項,我們可以這樣做:
i.<v1>##i.<v2>
可以生成類別<v1>
與類別<v2>
的主效果(各自的 dummies)以及交互作用(交乘項)。- 若其中一個交乘的變數是連續的話,可以使用
c.<v2>
。例如:i.gender##c.age
就會放入連續變數age
和類別化後的gender
以及兩者的交乘項。 - 如果是用
i.<v1>#i.<v2>
的話,僅會納入交互作用(交乘項)。 - 某些情形下,你也許會希望跑個 no-constant 的 regression(這樣就可以放入所有類別的 dummies,而不落入 dummy trap)。這時可以用
ibn.<var>
,避免丟去 base group。
假設檢定
跑完迴歸後,我們通常會接著作假設檢定。如果只是要看某個係數、參數是否顯著的話,回傳的報表就已經有了(Fig 4-1)。對於更一般的假設檢定,我們可以利用 test
或是 lincom
來檢定一些線性的限制條件,例如 H0 : β3 + β2 = 0;β3 = 1。此外,我們還可以根據剛跑出來,熱騰騰的迴歸模型去做預測,除了用在迴歸 fit 的資料上,也可以用在尚未見過的資料。以下條列說明:
test <varlsit>
,可以同時檢定<varlist>
中的每個<var>
是否為零。test (<res>) (<res>)
,可以同時檢定數個線性的限制式<res>
,<res>
可以是某種<exp>
,例如v1 + v2 = 0
、v3 = 1
。lincom <res>
,可以檢定某「個」線性的限制式,但這邊的<res>
要表示為:限制式等號右邊為 0 時,等號左半邊的部分,例如:<var3> — 1
。predict <var>, <pred>
,使用現有的模型來 fit 樣本點。<var>
是用來存 fitted value 的新變數,而<pred>
則是要 fit 的目標,比如說xb
就是回歸預測值x’b
,而resid
則是殘差項y — x’b
。- 其他檢定方法可參考:likelihood ratio test
lrtest
、non-linear testtestnl
等等。 - 請注意,上述這些指令都需要在估計指令(如
reg
)之後使用。如果重新跑了新的迴歸,舊的結果就會被覆蓋掉。²
取出迴歸結果
線性迴歸差不多就如此了,最後要提到取出迴歸資訊的方法:
- 2–6 有提到多數指令執行之後,會有一個 return list 來記錄一些訊息。對「估計指令」來說,則有一個 ereturn list 來紀錄模型的資訊,例如參數的估計值與變異 數矩陣、Sum Square Error 等。使用
ereturn list
即可查看這些資訊。 - 除了 ereturn list 之外。我們還可以藉由
_b[<var>]
、_se[<var>]
,來取得某自變數<var>
的估計係數與標準誤。 - 要出取得 factor variable 估計係數則是要透過
_b[<value>.<var>]
,比如說我想取出教育類別為3
(也許代表高中職)的估計係數時,可以使用_b[3.edu]
。 - 如果想知道
_b[]
內的變數該怎麼稱呼,也可以參考mat list e(b)
所列出的估計係數的向量(矩陣)。這個e(b)
正是來自ereturn list
的資訊。
[1]: 我們可以手動挑選 base group。 b<val>.<var>
可以更改 base group 為 <val>
。例如:b3.edu
就是以 3
所代表的教育程度為 base group。
[2]: 有興趣想看看怎麼暫存或叫回先前估計結果的人,可以參考 estimates
系列的指令