Stata可視化:讓他看懂我的結果!

作者:劉楊 | 連玉君 | (知乎 | 簡書 | 碼雲)


Stata 寒假班 報名中……

連玉君主講,2018年1月13日-21日,北京)

Stata初級班 | Stata高級班

我一直認為:

沒有耳朵不好的聽眾,只有嘴巴不好的講者!

沒有思維遲鈍的學生,只有邏輯混亂的老師!

所以,不要怪別人笨,那是因為我們沒有講清楚,至少是沒有用心講!

1. 回歸結果的圖形呈現

大家在做完一篇實證研究的論文之後是否有這樣的困惑:就是如何將估計係數結果能夠簡潔、直觀的呈現出來?

在學術會議交流論文、或者在畢業論文答辯時,一個常見的做法就是直接將回歸表格粘貼出來,然而弊端也是顯而易見的,那就是頁面中信息太多,導致想要突出的估計結果和顯著性判定被淹沒其中。

無疑,這是對老師和同行耐心力和細緻力的一份考驗,需要他們瞪大眼睛來看、豎起耳朵來聽,稍有打盹,翻頁過去的結果可能就忘記了,只能坐在那裡安靜的懷疑人生……

那麼,如果能夠用圖形的方式呈現估計係數及其顯著性,並且不同估計係數間的相互關係也能夠一目了然,豈不美哉?!

很幸運,Stata 提供了這樣的外部命令來完成這一工作。我們今天的推文就來給大家簡單的介紹一下這兩個外部命令 coefplotarrowplot

2. 目的

  • 圖形化展示回歸結果,尤其是分組回歸的係數差異。
  • 適用於課題報告、畢業答辯等展示。也適用於呈現論文中的複雜結果。

3. coefplot 命令

  • coefplot 可以非常便捷地對結果進行圖形化展示。
    • 參見 Stata Journal 14(4):708—737。
    • 作者提供了非常完整的介紹和Stata 範例,參見:

      coefplot主頁

      → | Getting started | Examples | Help file
    • 安裝:此命令為外部命令,可以使用 ssc install coefplot 進行安裝。
    • 該命令可以將回歸模型不同解釋變數的估計係數繪製在一張圖形中,默認設定還會添加估計係數的置信區間,方便判別顯著性。當然,該命令具有很強大的擴展性,可以呈現多種類型的圖示結果。
  • Note: 由於上述主頁已經對 coefplot 命令做了非常詳細的解釋,我們的推文中就不再細緻介紹,只是呈現一些常用的效果。

3.1 coefplot 命令的基本語法

coefplot [name] [, opition]

其中,name 為儲存於 stata 內存中的回歸結果名稱(使用 est store 命令),如果此處預設,則默認是 stata 內存中現存的回歸結果。

  • Stata 範例如下:. sysuse auto, clear

    . reg price mpg length turn

    . coefplot, drop(_cons)

說明:

  • 本例中,我們省略了 name 填項,則繪製的是剛剛完成回歸的結果。
  • drop 選項表示不繪製常數項的估計係數,也可以將 _cons 替換為其它變數。

    輸出效果如下:

3.2 拓展:分組回歸後繪圖

實證分析中還經常劃分兩個或兩個以上的子樣本,進行分組回歸,進而對比兩組的回歸係數。此時,使用 coefplot 可以非常直觀地進行組建係數的對比。

  • Stata 範例如下:

. reg price mpg length turn if foreign==0. est store Domestic . reg price mpg length turn if foreign==1. est store Foreign . coefplot Domestic Foreign, drop(_cons) xline(0) *-Note: xline表示在x軸0處做出輔助線,便於判斷顯著性. coefplot Domestic Foreign, /// drop(_cons) /// xline(0, lp(dash) lc(black*0.3)) *-Note: 如果想要調換 X 軸和 Y 軸,可以添加 vertical 選項, 圖略

3.3 拓展:對每一組回歸係數進行個性化設定

coefplot命令可以對不同的回歸進行圖形的單獨設定,基本語法如下:

coefplot (name [, plotopts]) (name [, plotopts]) ... [, globalopts]

其中:

  • plotopts 為設定單個組別圖形特徵的選項
  • globalopts 為設定圖形整體風格的選項

Stata範例 如下:

coefplot /// (Domestic, label("國產汽車") offset(0.05) pstyle(p3)) /// (Foreign , label("進口汽車") offset(-0.05) pstyle(p4)) /// , drop(_cons) xline(0, lp(dash) lc(black*0.3)

說明:

  • offset(#) 選項中的用於設定標記兩組係數的橫線的間距與默認值的倍數。默認 1 個單位的長度,則 offset(0.05) 表示間距為默認值的 5%。該選項也可以由全局 option 的 nooffsets 代替
  • pstyle 選項則用於設定線條的風格和色彩,可以在 p1-p15 之間任意選擇。

3.4 拓展:不同的估計模型下估計係數的比較

  • 語法如下:

coefplot (namelist [, plotopts]) ...

不同估計模型用括弧來隔開。例如,我們將多元回歸的每個解釋變數進行單變數回歸,並將估計係數與多元回歸的係數比較。

  • Stata範例如下:

. reg price mpg length turn

. est store multi

. foreach var in mpg length turn {

qui reg price `var"

est store `var"

}

. coefplot ///

(mpg length urn, label("單變數回歸")) ///

(multi, label("多元回歸")) ///

, drop(_cons) ///

xline(0, lp(dash) lc(black*0.3))

graph export "圖4:多元回歸係數和單變數回歸係數比較.png", replace

*-Note: 在 namelist 中用 分隔存儲的回歸結果名稱

3.5 拓展:不同被解釋變數下估計係數的圖形比較

coefplot命令也可以對更換被解釋變數後,估計係數的相互關係進行比較,這實質上是不同圖形的合併。基本語法如下:

coefplot plotlist [, subgropts] || plotlist [, subgropts] || … [, globalopts]

其中,

  • plotlist 是一個子回歸存儲的名稱
  • subgropts 是對應的 option 選項。
  • Stata範例如下:

reg price mpg length turn if foreign==0est store Domesticreg price mpg length turn if foreign==1est store Foreignreg weight mpg length turn if foreign==0est store Domestic_w //更換了被解釋變數reg weight mpg length turn if foreign==1est store Foreign_w //更換了被解釋變數#d ;coefplot (Domestic, label("國產汽車")) (Foreign , label("進口汽車")), bylabel(Price) || (Domestic_w) (Foreign_w), bylabel(Weight) || , drop(_cons) byopts(xrescale) xline(0, lp(dash) lc(black*0.3)) ;#d crgraph export "圖5:不同被解釋變數回歸的比較.png", replace

4. arrowplot 命令

顧名思義,這個命令是用來畫箭頭的!

安裝help arrowplot 此命令為外部命令,可以使用 ssc install arrowplot 下載安裝。

用途

  • arrowplot 命令可以通過 groupvar 選項對樣本進行分組,並繪製分組後的散點圖來描述組間趨勢。並在每一個散點上繪製箭頭線,來描述每一組的組內趨勢(回歸後斜率)。
  • 具體應用該圖形的實證研究可以參見 「Betsey Stevenson & Justin Wolfers, 2008. 「Economic Growth and Subjective Well-Being: Reassessing the Easterlin Paradox」。文中給出了描述幸福感的「Stevenson-Wolfers happiness graphs」,就是利用該命令呈現的。

4.1 基本語法

arrowplot yvar xvar [if] [in] [weight], groupvar(varname) [options]

  • yvarxvar 用來定義被解釋變數和解釋變數,同時也指定了坐標軸
  • groupvar用來制定分組變數。
  • Stata範例如下:

. sysuse "nlsw88.dta", clear. decode occupation, gen(occu_str) maxlength(6). arrowplot wage hours, groupvar(occu_str). graph export "圖7:arrowplot 基本繪圖.png", replace

4.2 拓展:加入控制變數的箭頭圖

如果想要在回歸過程中加入其它控制變數,可以加入 controls(varlist) 選項,Stata 範例如下

. arrowplot wage hours, groupvar(occu_str) /// control(age collgrad). graph export "圖8:arrowplot 回歸中加入控制變數.png", replace

4.3 拓展:添加分組信息,規定箭頭長度

-Stata範例如下

. arrowplot wage hours, groupvar(occu_str) /// groupname(occupation) line(2). graph export "圖9:arrowplot 添加分組信息,規定箭頭長度.png", replace

4.4 更為豐富的設定

我們可以在 arrowplot 命令中加入諸多 Stata 一般圖形所支持的選項,以便對圖形進行更為靈活的設定。

  • Stata範例如下

sysuse "nlsw88.dta", cleardecode occupation, gen(occu_str) maxlength(6)#d ; arrowplot wage hours, groupvar(occu_str) cont(age collgrad) groupname(occupation) line(2) title("工作時數與小時工資關係之行業特徵") subtitle("nlsw88.dta") xtitle("工作時間(每周工作小時數)") xscale(titlegap(2)) ytitle("小時工資") scheme(s1mono) ;#d cr. graph export "圖10:arrowplot 加入一般化圖形選項.png", replace

  • 為圖形添加標題和子標題,並設定X軸與Y軸說明,並改為中文投稿常用的黑白模式

關於我們

  • Stata 連享會(公眾號:StataChina)】由中山大學連玉君老師團隊創辦,旨在定期與大家分享 Stata 應用的各種經驗和技巧。
  • 公眾號推文同步發佈於 【簡書-Stata連享會】 和 【知乎-連玉君Stata專欄】。可以在簡書知乎中搜索關鍵詞StataStata連享會後關注我們。
  • 推文中的相關數據和程序,以及 Markdown 格式原文 可以在 【Stata連享會-碼雲】 中獲取。【Stata連享會-碼雲】 中還放置了諸多 Stata 資源和程序。如 Stata命令導航 || stata-fundamentals || Propensity-score-matching-in-stata || Stata-Training 等。

聯繫我們

  • 歡迎賜稿: 歡迎將您的文章或筆記投稿至Stata連享會(公眾號: StataChina),我們會保留您的署名;錄用稿件達五篇以上,即可免費獲得 Stata 現場培訓 (初級或高級選其一) 資格。
  • 意見和資料: 歡迎您的寶貴意見,您也可以來信索取推文中提及的程序和數據。
  • 招募英才: 歡迎加入我們的團隊,一起學習 Stata。合作編輯或撰寫稿件五篇以上,即可免費獲得 Stata 現場培訓 (初級或高級選其一) 資格。
  • 聯繫郵件: StataChina@163.com

Stata 寒假班 報名中……

連玉君主講,2018年1月13日-21日,北京)

Stata初級班 | Stata高級班

推薦閱讀:

協整:醉漢牽著一條狗

TAG:Stata | stata学习 | stata连享会 |