
1. VAR模型入門為什么論文里它如此常見最近幾年經濟金融類論文里出現(xiàn)頻率最高的計量模型向量自回歸VAR絕對算一個。不管是宏觀政策效應評估、股價與宏觀變量的動態(tài)關系還是行業(yè)間的溢出效應VAR模型幾乎是標準配置。但很多同學第一次跑VAR時會遇到一個尷尬局面命令敲下去了結果也出來了但不知道怎么看、怎么解讀、怎么寫進論文。甚至有人把VAR和VECM混為一談直接把滯后階數選錯導致后續(xù)脈沖響應結果完全不可信。我最初接觸VAR是在做某宏觀經濟課題的時候當時導師只給了一句話“把所有內生變量丟進去跑個VAR看脈沖響應?!甭犉饋砗唵螌嵅倨饋砣强?。樣本期怎么選、變量順序怎么排、滯后階數用什么準則定、穩(wěn)定性檢驗要不要做、協(xié)整關系存在時該怎么處理這些問題不搞清楚跑出來的結果就是一堆數字根本沒法用。這篇文章就是把VAR從原理到Stata實操完整梳理一遍。我不會堆公式也不會照搬手冊而是把每一步操作背后的邏輯講清楚再把可直接復制的命令和論文匯報模板給出來。適合正在寫實證論文、做課程作業(yè)以及剛接觸時間序列數據分析的讀者。2. 模型構建前的關鍵準備變量選擇與數據清洗2.1 變量選取的內在邏輯與常見誤區(qū)VAR模型的一大優(yōu)勢是不需要事先區(qū)分內外生變量所有變量在系統(tǒng)內地位對等由數據自身說話。但這絕不意味著可以把變量隨便往里丟。變量選取必須要有經濟理論或現(xiàn)實邏輯作為支撐否則就是“垃圾進垃圾出”。我見過不少案例為了湊模型把七八個相關度極低的宏觀變量一起塞進去結果滯后階數巨大、自由度急劇損耗、脈沖響應圖亂成一團。VAR對參數個數非常敏感每個方程的參數數量是k*p個k為變量數p為滯后階數變量每增加一個估計參數會成倍增加。例如4變量、滯后4期的VAR模型每個方程要估計4×416個系數外加常數項4個方程總共超過60個參數。樣本量不夠時就非常容易過度擬合。實操建議核心變量控制在3到5個優(yōu)先選擇理論基礎明確、頻率一致、樣本期內含義穩(wěn)定的指標。做貨幣政策分析時常用產出、通脹、利率的組合做匯率傳遞效應時常用匯率、進口價格、CPI的組合做行業(yè)傳染效應時則選不同市場或行業(yè)指數。變量之間的先后排序也要有依據后面在脈沖響應部分詳細展開。2.2 數據頻率口徑與樣本期處理VAR要求所有變量的觀測頻率一致且時間點對齊。實際操作中最大的麻煩來自數據頻率不統(tǒng)一比如GDP只有季度數據而政策利率是月度數據股價指數甚至可以做日度數據。處理方式一般有三種高頻轉低頻取平均值或期末值、低頻插值補齊、或者干脆統(tǒng)一用低頻數據建模。從穩(wěn)妥角度我建議優(yōu)先采用統(tǒng)一低頻的策略插值數據容易引入人為平滑噪音導致估計結果虛假精確。樣本期的選擇上盡量避開結構性突變明顯的時間窗口。VAR假設變量之間的關系在樣本期內相對穩(wěn)定如果包含匯率制度改革、重大危機這類事件模型估計結果會被嚴重扭曲。穩(wěn)妥的做法是把樣本期切成段分別做穩(wěn)健性檢驗或者引入虛擬變量做干預分析。我自己的習慣是先畫所有變量的時序圖直觀看看有沒有明顯的斷點或異常波動看著就不對勁的區(qū)間寧可不納入模型。數據清洗階段的另一個重點是處理缺失值和異常值。Stata里可以用tsfill填補時間缺口缺失少的用線性插值或者前值填充缺失嚴重的變量直接放棄。異常值方面對數化能有效壓縮極端值影響金融數據幾乎一律取對數差分或對數水平值。2.3 變量的變換方式平穩(wěn)性優(yōu)先還是經濟含義優(yōu)先這是一個經典糾結。取對數能讓數據平滑且系數具有彈性解釋取差分能讓非平穩(wěn)序列變?yōu)槠椒€(wěn)序列但差分也意味著變量含義從“水平值”變成了“增量”。我的處理原則是如果變量本身是比率類指標利率、失業(yè)率、通脹率直接用水平值如果是指數或絕對值類指標GDP、股價、貨幣供應量先取對數再根據平穩(wěn)性檢驗決定是否差分。需要提醒的是不要機械地先差分再建模。如果變量之間存在協(xié)整關系差分后的VAR會損失長期信息此時應該用向量誤差修正模型VECM而非普通VAR。實際操作順序應該是平穩(wěn)性檢驗 → 協(xié)整檢驗 → 如果存在協(xié)整考慮VECM如果不存在使用差分后的平穩(wěn)序列建VAR。后面的章節(jié)會一步步走流程。3. Stata全流程實操從數據導入到模型估計3.1 數據準備與時間序列聲明第一步是讓Stata認識時間序列數據。假設數據文件為macrodata.dta包含年份、季度、gdp、cpi、rate三個變量。如果數據是季度頻率需要先聲明時間變量use macrodata.dta, clear tsset quartertsset之后用tsline gdp cpi rate畫時序圖確認數據的整體走勢用describe查看變量存儲類型和樣本范圍。這個環(huán)節(jié)必不可少后續(xù)所有滯后運算、差分運算都依賴正確的時間序列聲明。如果時間變量是字符串格式需要先用destring轉換或gen新變量。常見報錯repeated time values in sample說明時間變量有重復值要先duplicates report quarter并duplicates drop處理。如果時間不連續(xù)tsfill可以補齊時間缺口補完后變量值會變成缺失需要進一步填充或標注。3.2 平穩(wěn)性檢驗ADF與PP的細節(jié)與操作VAR建模的必要前提是系統(tǒng)內變量平穩(wěn)或者存在協(xié)整關系。最常用的檢驗是ADF單位根檢驗。Stata命令是dfuller gdp dfuller cpi, trend dfuller rate, lags(2)dfuller默認包含常數項trend選項添加時間趨勢項lags(#)指定滯后階數。判斷順序是先看時序圖如果序列圍繞零均值波動選不含趨勢的ADF如果呈現(xiàn)明顯趨勢則要包含趨勢項。兩種結果不一致時例如帶趨勢項檢驗平穩(wěn)、不帶則不平穩(wěn)多數情況是序列存在確定性趨勢差分后再檢驗通常能通過。每個變量都要做一遍ADF和PP檢驗可以寫個小循環(huán)提高效率。我在操作中習慣把檢驗結果手動記錄在Excel里形成一張“變量-檢驗形式-ADF統(tǒng)計量-P值-結論”的表格寫論文時直接引用。下面是一個可選的小批量實現(xiàn)思路foreach v of varlist gdp cpi rate { dfuller v, lags(2) }這里不做強制自動化提取輸出簡單逐個人工掃結果并記錄表即可。注意ADF檢驗的滯后階數通常根據SIC或AIC自動或手動選定階數太少會導致殘差自相關影響檢驗功效階數太多會損失檢驗力。實踐上我默認從lags(2)開始嘗試再看estat bgodfrey或者檢驗殘差是否白噪聲。3.3 協(xié)整檢驗什么時候必須轉向VECM如果原始變量水平值不平穩(wěn)但同階單整例如都是I(1)就要做協(xié)整檢驗。協(xié)整的經濟含義是雖然單個變量隨機游走但它們的某種線性組合是平穩(wěn)的說明變量之間存在長期均衡關系。此時直接對差分序列做VAR會遺漏這個長期信息正確做法是VECM。Stata里做Johansen協(xié)整檢驗的命令是vecrank gdp cpi rate, lags(3) trend(constant)lags(#)這里指的是VAR系統(tǒng)中的最大滯后階數trend(constant)表示協(xié)整方程中僅包含常數項。輸出表格中會給出不同秩rank假設下的跡統(tǒng)計量和最大特征值統(tǒng)計量。選擇能使檢驗統(tǒng)計量首次不拒絕原假設的秩作為協(xié)整個數。協(xié)整檢驗需要較大的樣本量通常要求100個以上的觀測值才相對可靠。樣本較小時檢驗結果經常在“存在一個協(xié)整關系”和“不存在協(xié)整”之間搖擺。遇到這種情況我建議結合經濟理論判斷。如果理論上明顯存在長期均衡例如貨幣需求方程里的貨幣量、產出、利率即使統(tǒng)計檢驗邊緣不顯著也可以選擇VECM反之則老老實實用差分VAR。但如果樣本確實有限過度依賴理論強行選擇VECM而不報告檢驗結果細節(jié)審稿人通常不會輕易接受最好把兩種情況都做出來以穩(wěn)健性檢驗的形式呈現(xiàn)。3.4 滯后階數選擇信息準則與殘差診斷的結合滯后階數是VAR模型中最敏感的設定。階數太小殘差存在自相關估計結果有偏階數太大參數過多、估計方差爆炸。Stata的定階命令varsoc gdp cpi rate, maxlag(8)輸出中會同時給出LR、FPE、AIC、HQIC、SBIC五個準則的結果每個準則會標記出最優(yōu)滯后階數。我的經驗是五個準則意見不一致時優(yōu)先看SBIC和HQIC因為這兩個準則對參數懲罰更重更不容易過擬合。如果SBIC給出1階、AIC給出4階我會在論文中使用1階或2階作為主設定把4階作為穩(wěn)健性檢驗。定階之后必須做殘差診斷檢查模型殘差是否還存在自相關。命令var gdp cpi rate, lags(1/2) estat autocestat autoc輸出的是LM檢驗結果原假設是“不存在自相關”。如果p值小于0.05就說明殘差還有自相關需要增加滯后階數。另外還要做殘差正態(tài)性檢驗estat normality和穩(wěn)定性檢驗后者非常重要。3.5 VAR模型估計與穩(wěn)定性檢驗滯后期確定后直接估計VARvar gdp cpi rate, lags(1/2)這里的lags(1/2)表示從1階到2階全部包含等價于滯后2期。輸出結果是一個包含多個方程的龐大表格每個方程對應一個因變量表格里是各滯后項的系數和顯著性。論文中通常不需要報告完整系數表只需匯報滯后階數、樣本區(qū)間、信息準則值和殘差檢驗結果完整估計結果可以作為附錄。穩(wěn)定性檢驗是VAR建模中絕對不能跳過的一步。它的本質是檢查模型系統(tǒng)是否滿足平穩(wěn)條件直觀判斷方式是看特征多項式的逆根是否全部落在單位圓內。Stata命令varstablevarstable會輸出特征根列表和一張單位圓圖。如果所有特征根都小于1模型穩(wěn)定如果有任何一個大于或等于1脈沖響應結果就不收斂結論完全不可用。順帶一提圖形以graph export導出時建議設置中文字體支持否則標題和標簽可能顯示亂碼。這里還有一個實際問題VAR中如果某個方程回歸的R2特別低甚至低于0.1該怎么辦這個現(xiàn)象在金融數據里很常見主要是因為金融收益率序列本身噪音大可預測成分本來就小。處理方法不是在VAR里強行提高擬合優(yōu)度而是如實報告并合理解釋。VAR的重點是動態(tài)關系而非擬合優(yōu)度脈沖響應和方差分解才是核心產出。4. 核心產出解讀脈沖響應、方差分解與Granger因果4.1 變量排序脈沖響應的成敗細節(jié)脈沖響應函數IRF刻畫的是某個變量的一個標準誤沖擊對系統(tǒng)內其他變量的動態(tài)影響路徑。這個“標準誤沖擊”的識別依賴于誤差項的分解也就是變量間的同期影響關系怎么分配。Stata默認使用Cholesky分解這種方法要求給變量排一個先后順序排在前面的變量可以同期影響后面的變量但后面的變量只能滯后影響前面的變量。這意味著變量順序直接決定脈沖響應的形態(tài)特別是短期效應。我舉一個具體的例子如果把利率排在物價前面那物價同期對利率沖擊的響應實際上就是零這個在解釋時容易產生誤導。怎么排核心原則是把“外生性較強、對當期影響敏感度最低”的變量排前面。宏觀研究里常見排序是產出、物價、利率、貨幣量即實體經濟變量在前政策變量在中間金融市場變量最后。我自己做過的匯率傳導研究中排序是產出、匯率、價格、利率因為認為產出受匯率同期的直接影響比較小而匯率對進口價格的影響相對迅速。Stata操作中變量排序可以寫為var gdp cpi rate, lags(1/2) irf create myirf, set(irffile) step(24) irf graph oirf, impulse(rate) response(cpi) yline(0)step(24)表示追蹤24期脈沖響應月度數據就是2年季度數據就是6年。oirf表示正交化脈沖響應它基于Cholesky分解普通irf則是廣義脈沖響應不依賴變量順序。如果對排序沒有足夠把握至少做一組廣義脈沖響應的穩(wěn)健性對照。4.2 脈沖響應圖的正確解讀方式脈沖響應圖解讀有一個常見誤區(qū)看到某條線偏離零線就急著下結論“存在顯著影響”。嚴格來說只有加上置信區(qū)間之后才能判斷顯著性。Stata默認在irf graph中會繪制95%置信帶。判讀標準是如果置信帶包含零線說明沖擊效應在統(tǒng)計上不顯著如果置信帶完全位于零線上方或下方才說明效應顯著。看圖時還要關注幾個信息點沖擊后的初始方向、達到峰值的時間、效應收斂的時間。這些信息反映的是沖擊傳導的速度和持續(xù)時間。比如利率沖擊對產出的影響如果呈現(xiàn)“先小幅正向、后來轉負”的形態(tài)那是典型的價格之謎現(xiàn)象需要檢查模型設定和數據構造是否合理。論文中報告脈沖響應時通常選擇關鍵變量組合畫圖一般不把所有變量組合全部堆砌在一個圖上。每張圖配一段文字解釋重點描述“響應方向、峰值大小、持續(xù)期、顯著性”四個要素。我自己寫實證論文時的習慣是正文放2到4張核心圖其余放附錄。4.3 方差分解讀出變量的相對重要程度方差分解回答的問題是在預測誤差的方差中有多大比例源于自身沖擊、有多大比例源于其他變量的沖擊。它幫助我們判斷某個變量在整個系統(tǒng)中的影響地位。Stata命令irf table fevd, impulse(rate) response(gdp)輸出的表格中每一行對應一個預測期限列表示來自各變量沖擊的解釋比例。關注點通常是某個外生變量沖擊對目標變量的貢獻是逐期上升還是衰減上升速度如何最終穩(wěn)定在什么水平我的建議是論文中報告方差分解時選一個代表性的期限比如第12期或第24期做橫向對比而不是把所有期限全部列出來。同一時期多個變量之間的貢獻度才是讀者最關心的信息。如果某個沖擊對系統(tǒng)內其他變量的方差貢獻長期接近零說明它在模型中幾乎是一個孤立變量可以考慮是否真的適合放進系統(tǒng)。4.4 Granger因果最容易被過度解讀的檢驗Granger因果檢驗在Stata里的實現(xiàn)是vargranger輸出表格中每個方程都會給出“排除性檢驗”的結果檢驗某個變量的滯后項是否對另一個變量的當期值有聯(lián)合解釋力。如果p值小于0.05就稱該變量在Granger意義上“導致”另一個變量。必須反復強調Granger因果不是哲學意義上的因果關系只是預測能力上的先后關系。某個變量Granger導致另一個變量只說明前者的歷史信息有助于預測后者的未來值。論文寫作中措辭要謹慎寫“存在顯著的預測關系”“在Granger意義上具有因果性”而不是直接寫“導致了”。我見過很多論文把Granger因果結果做成一個大矩陣表格把原假設、統(tǒng)計量、p值全列出來。這種做法可以但要控制篇幅一般只報告主要發(fā)現(xiàn)的組合即可。常見處理是單獨列出原假設和p值星號標注顯著性水平表注說明“基于VAR(p)模型的Granger因果檢驗”。5. 論文應用與穩(wěn)健性檢驗從結果到說服力5.1 論文中VAR模型部分的寫作框架把VAR結果寫進論文不是簡單丟幾張圖和幾個表格就行。一個規(guī)范的VAR實證章節(jié)通常包含這樣幾個模塊。第一段寫模型設定依據說明為什么用VAR變量選擇的文獻依據和經濟邏輯。第二段報告數據情況樣本區(qū)間、頻率、來源、變量處理方式。第三段報告單位根檢驗結果說明為什么能用VAR而不是VECM或者反過來說明為什么用VECM。第四段報告滯后階數選擇結果哪個準則選了哪一階。第五段報告模型估計和檢驗結果重點是穩(wěn)定性和殘差診斷。最后用脈沖響應和方差分解解釋經濟含義并結合前文理論做呼應。審稿人最關注的幾個點一定要主動覆蓋滯后階數選擇有沒有依據、模型是否穩(wěn)定、變量順序變動會不會改變核心結論、穩(wěn)健性檢驗是否充分。自己寫的時候有意識地補全這些信息等于提前打消了審稿人的部分質疑。5.2 穩(wěn)健性檢驗的常規(guī)套路論文審稿中很常見的修改意見是“請?zhí)峁┓€(wěn)健性檢驗”。VAR模型的穩(wěn)健性檢驗可以從以下幾個維度展開改變滯后階數。主模型用2階穩(wěn)健性檢驗換成1階、3階或4階。改變變量順序。對靈敏的Cholesky分解結果做順序互換測試。改變樣本區(qū)間。剔除金融危機、重大政策變革時期后的子樣本回歸。替代變量。用季調數據替代原始數據、用同比增速替代環(huán)比增速等。模型對比。如果主模型是VECM備選的差分VAR結果也放在穩(wěn)健性部分。實際寫論文時把2到3項穩(wěn)健性檢驗寫在正文其余的放在附錄。全做一遍工作量不小但能顯著提升結論的可信度。不要只做一項也不要把所有項目都堆在正文里讓讀者失去重點。5.3 多模型對比VAR與VECM、面板VAR的取舍論文選題和模型選擇是一體的。這里有個實用的決策思路如果樣本是單一國家/市場的宏觀時間序列VAR或VECM是比較合適的選擇如果樣本包含多個國家和地區(qū)面板VARPanel VAR更適合因為能控制個體異質性同時利用橫截面信息提高估計效率。Stata中實現(xiàn)面板VAR需要額外安裝外部命令xtvar等。它的解讀邏輯與時間序列VAR類似但在滯后階數統(tǒng)一性和個體固定效應處理上有額外要求。我的建議是如果沒有使用面板VAR的十足必要優(yōu)先選擇傳統(tǒng)時間序列VAR實操難度更低審稿人熟悉的程度也更高。6. 常見問題排查一次實操全記錄6.1 結果不顯著、脈沖響應發(fā)散等典型狀況我在做VAR的過程中遇到過不少讓新手抓狂的情況這里列幾個典型場景和處理辦法。場景一所有系數都不顯著。這是VAR模型中最常見的情況因為滯后項的共線性使得單個系數估計精度下降模型中有多個滯后項本身就分散了顯著性。解決辦法是關注聯(lián)合檢驗而非單個系數的t檢驗??碐ranger因果檢驗和脈沖響應置信區(qū)間這些指標對預測效應更敏感。如果確實全部不顯著檢查樣本量和滯后階數是否合適考慮減少變量個數或者縮短滯后階數。場景二脈沖響應置信帶特別寬。寬度通常意味著樣本信息量不足或變量間關系太弱。此時可以考慮縮短預測期數做局部預測或者增加樣本量。部分版本的Stata中irf的置信區(qū)間計算涉及蒙特卡洛抽樣隨機數種子差異也可能導致每次結果有細微差別但這不影響結論方向。場景三模型不穩(wěn)定特征根接近或超過1。這是非常嚴重的問題。優(yōu)先檢查變量是否真的是平穩(wěn)序列。如果有變量存在單位根卻未做差分系統(tǒng)就會出現(xiàn)單位根問題。另外還要關注時間趨勢項是否遺漏。處理方式是返回到平穩(wěn)性檢驗和差分環(huán)節(jié)重新構造變量。場景四結果對變量順序高度敏感。當變量間同期相關性較強時Cholesky分解結果確實會隨變量順序變化而產生明顯差異。這就需要用廣義脈沖響應來做對照并且通過經濟理論確定一個合理的基準順序在論文中如實說明排序依據和穩(wěn)健性檢驗結果。6.2 易被忽視的數據操作細節(jié)幾個容易踩的小坑一并提醒取對數時注意變量是否有非正值。若包含零或負數ln()會生成缺失值。金融收益率數據不用取對數直接進模型。差分后樣本量會減少。做變量變換之前先確認樣本是否足夠。tsset之后不要隨意sort原始時間序列會影響滯后運算。VAR命令中變量順序就是Cholesky分解順序。如果慢慢往后追加變量原有變量的脈沖響應也會隨之變化。導出表格時Stata中esttab配合var命令并不穩(wěn)定我一般用outreg2或者手動整理結果到Word。結果表格多時可以用esttab using var_results.rtf配合替換選項但務必檢查導出的表格結構和數字精度。6.3 提升論文說服力的幾個寫作技巧實證論文里VAR模型部分最常見的批評是什么數據驅動、缺乏理論、模型設定隨意。要避免這類批評寫作技巧上可以做幾件事。報告滯后階數選擇時不要只匯報最終選擇把信息準則值的比較表格放出來讀者能感受到選擇過程的嚴謹性。做脈沖響應分析時圍繞核心經濟機制給出先驗預期再與實證結果對照增加故事感。收斂速度做出經濟解釋。方差分解給出經濟故事例如“第24期貨幣政策沖擊對產出的方差貢獻達到30%以上說明價格型政策工具在樣本期內對產出波動具有重要影響”。小心處理“顯著但很小”和“不顯著但在預期方向”的結果如實報告合理的解讀比好看的結果更重要。VAR是工具論文的價值在解釋能力。7. 最后再分享幾個實戰(zhàn)心得VAR這個模型門檻不算低但也沒有想象中那么高。它的“友好”體現(xiàn)在不用費盡心思找工具變量和外生性論證把變量一起丟進系統(tǒng)、讓數據說話就行。它的“不友好”體現(xiàn)在所有設定選擇都會直接影響結論滯后階數、變量順序、樣本區(qū)間、變量形式處處都是決策點。我的實操體會是做VAR實驗就像做菜菜譜可以照抄但火候得自己摸索。每換一組數據、每換一個研究問題模型選擇的結果都可能有變化。與其到處找“最優(yōu)參數”不如把診斷過程系統(tǒng)性地做一遍把每一步選擇依據記錄下來。這樣得到的模型不一定完美但經得起追問和檢驗。最后分享一個小技巧做VAR之前先把數據的時序圖、相關性矩陣、單位根檢驗結果放在一個文件夾里統(tǒng)一命名。后續(xù)無論寫論文還是應付導師追問材料拿出來就很從容。而且一旦需要調整變量或樣本期之前的診斷記錄可以幫自己快速定位變化來源不至于從頭再來。這些準備工作看似瑣碎實際能節(jié)省大量時間也能讓整個研究過程更加可控。祝各位跑VAR順利。