此文內(nèi)容為《動(dòng)態(tài)隨機(jī)一般均衡(DSGE)模型》的筆記友题,李向陽(yáng)老師著虚倒,清華大學(xué)出版社出版嫡锌。
我只將個(gè)人會(huì)用到的知識(shí)作了筆記,并對(duì)教材較難理解的部分做了進(jìn)一步闡述檬寂。為了更易于理解终抽,我還對(duì)教材上的一些部分(包括代碼和正文)做了修改。
僅供學(xué)習(xí)參考桶至,請(qǐng)勿轉(zhuǎn)載昼伴,侵刪!
第3章 · Dynare基本應(yīng)用(2)
上一篇文章已經(jīng)向大家介紹了如何在Dynare中編寫(xiě)一個(gè)完整的模型文件镣屹。下面的3.4 內(nèi)生變量的表達(dá)形式圃郊、3.5 Dyanre文件的預(yù)編譯和運(yùn)行原理、3.6 Dynare的解的表示野瘦、3.7 求解結(jié)果分析和調(diào)用會(huì)介紹一些稍微技術(shù)性的問(wèn)題描沟。除了3.4和3.7以外,對(duì)初學(xué)者而言并非十分重要鞭光。
3.4 內(nèi)生變量的表達(dá)形式:level or log-level
模型均衡條件的輸入是Dynare編程的一個(gè)核心吏廉,因?yàn)榫鈼l件定義了整個(gè)模型。而多數(shù)情形下惰许,均衡條件是參數(shù)和內(nèi)生變量的非線性組合席覆。
一般來(lái)說(shuō),內(nèi)生變量的表達(dá)形式有3種:
水平形式():即變量本身
對(duì)數(shù)水平形式():以對(duì)數(shù)形式進(jìn)入模型文件
離差形式():線性形式
3.4.1 離差形式
教材的1.1.2 線性化與對(duì)數(shù)線性化介紹了內(nèi)生變量的離差形式汹买。一階線性是學(xué)習(xí)DSGE的良好出發(fā)點(diǎn)佩伤,但并不建議對(duì)每一個(gè)模型的均衡條件都進(jìn)行線性化聊倔,然后輸入到模型文件中,原因有:
手動(dòng)線性化每一個(gè)均衡條件極其容易出錯(cuò)
Dyanre可以幫你完成線性化生巡,只需要在求解階數(shù)設(shè)定
order=1
就可以了
下面著重介紹對(duì)數(shù)水平形式耙蔑。
3.4.2 對(duì)數(shù)水平形式
對(duì)數(shù)水平形式對(duì)于脈沖響應(yīng)圖形的顯示為重要,一般推薦在實(shí)際研究中使用該形式孤荣。下面通過(guò)第3.1節(jié)的例子來(lái)簡(jiǎn)單解釋對(duì)數(shù)水平形式的具體內(nèi)涵和使用方法甸陌。以為例:
進(jìn)行如下等價(jià)變形:
如果定義3個(gè)新變量為水平變量的對(duì)數(shù),即對(duì)數(shù)水平變量(添加字母表示對(duì)數(shù)變量):
(沒(méi)有 的原因是它本身就是對(duì)數(shù)水平的)那么上述均衡條件可以進(jìn)一步表示為:
對(duì)比和不難發(fā)現(xiàn)盐股,在實(shí)際操作中钱豁,只需要將相應(yīng)的水平變量替換為 的形式,就可以完成從水平變量到對(duì)數(shù)變量的轉(zhuǎn)變疯汁。此時(shí)牲尺,在源代碼 10
中,% (2) 勞動(dòng)供給方程
就要變?yōu)?源代碼 13
:
%----- 源代碼 13 -----%
···
% (2) 勞動(dòng)供給方程
[name = 'Labor supply']
((1-theta)/theta) * (exp(c)/(1-exp(lab))) = (1-alpha)*exp(z)*exp(k(-1))^alpha*exp(lab)^(-alpha);
···
需要注意的是幌蚊,雖然這個(gè)時(shí)候變量的名稱相同谤碳,但數(shù)學(xué)意義已經(jīng)從水平變量 變成了對(duì)數(shù)水平 。這可以理解為原來(lái)應(yīng)該是 的地方現(xiàn)在需要取指數(shù) 才能變成原來(lái)的樣子霹肝,所以現(xiàn)在的 應(yīng)該變成了 估蹄,也就是對(duì)數(shù)水平。
在將所有均衡條件都改為對(duì)數(shù)水平后沫换,Dynare輸出的穩(wěn)態(tài)值是對(duì)數(shù)水平的穩(wěn)態(tài)值而非水平變量的穩(wěn)態(tài)值臭蚁;變量之間的相關(guān)系數(shù)變成了對(duì)數(shù)水平變量之間的相關(guān)系數(shù)而非水平變量;模擬的樣本也將是對(duì)數(shù)水平的變量讯赏。這些在使用的時(shí)候都必須注意垮兑。
使用對(duì)數(shù)水平的意義就在于,使得脈沖響應(yīng)圖形變成了對(duì)穩(wěn)態(tài)偏離的百分比漱挎,屬于相對(duì)偏離(具體推導(dǎo)請(qǐng)參考教材P131)系枪;而水平變量刻畫(huà)的偏離是具體的偏離值,屬于絕對(duì)偏離磕谅。相對(duì)偏離使得脈沖響應(yīng)圖消除了量綱的影響私爷,使得圖形之間不會(huì)出現(xiàn)比例不協(xié)調(diào)的問(wèn)題。
值得一提的是:
雖然變量的表達(dá)形式發(fā)生了變化膊夹,但是均衡條件的結(jié)構(gòu)沒(méi)有發(fā)生變化衬浑,從而不會(huì)改變模型的內(nèi)涵和變量的變化趨勢(shì),只有變量本身和結(jié)果的解釋方法發(fā)生了變化
并非所有變量都合適取對(duì)數(shù)放刨,如果某些變量的穩(wěn)態(tài)為負(fù)值工秩,一般不能取對(duì)數(shù)
某些比率變量,如利率,在凈值(net形式)下不宜取對(duì)數(shù)助币,只有在總值(gross形式)下才可以取對(duì)數(shù)浪听,否則沒(méi)有經(jīng)濟(jì)內(nèi)涵
3.5 Dynare文件的預(yù)編譯和運(yùn)行原理
Dynare的模型文件使用Dynare語(yǔ)言編寫(xiě)的*.mod
文件,只有Dyanre才能讀懂眉菱,Matlab無(wú)法直接處理迹栓。雖然模型文件最終的執(zhí)行是依靠Matlab,但是必須經(jīng)過(guò)Dynare的預(yù)處理之后俭缓,才能夠形成Matlab能讀懂的*.m
文件供其運(yùn)行迈螟。
3.5.1 Dynare文件的預(yù)編譯和運(yùn)行原理
在編寫(xiě)完模型文件后,就是編譯并運(yùn)行模型尔崔,求解模型的最終目標(biāo)是求解決策函數(shù)。模型文件的預(yù)處理都交給Dynare的預(yù)處理器(Preprocessor)完成褥民,它是Dynare的編譯器季春,包含了多個(gè)組成部分。其基本流程如下:
如果模型含有宏命令(在“6.5 Dynare宏命令變成示例”討論)消返,會(huì)先使用宏處理器载弄,生成不含宏命令的模型文件
使用解析器對(duì)模型文件進(jìn)行編譯,形成較為形象撵颊、表征模型的Matlab文件(
*.m
)宇攻。這些m文件包括了對(duì)Dynare和Matlab內(nèi)置函數(shù)的命令和調(diào)用,最終依靠Matlab輸出結(jié)果
dynare
命令是預(yù)編譯和求解的起點(diǎn)倡勇,即通過(guò)該命令啟動(dòng)Dynare逞刷,自動(dòng)完成編譯處理和求解兩項(xiàng)任務(wù)。dynare
命令使用的方式非常簡(jiǎn)單妻熊,只需要在命令后聲明模型文件的全名(后綴.mod
可加可不加夸浅,注意對(duì)文件名大小寫(xiě)敏感),然后以空格隔開(kāi)的各種選項(xiàng)扔役,具體語(yǔ)法參考源代碼 14
:
%----- 源代碼 14-----%
dynare RBC.mod
dynare RBC
dynare RBC noclearall
Dynare的dynare
命令擁有20多個(gè)選項(xiàng)帆喇,可能較為常用的有:
noclearall
:如果不使用該選項(xiàng),Dyanre會(huì)在生成的m文件開(kāi)頭加入clear all
命令清除內(nèi)存savemacro
:會(huì)命令宏處理器保存不含有宏語(yǔ)言的模型文件nolog
:不保存日志文件nowarn
:不顯示任何警告信息nograph
:不畫(huà)圖(不顯示也不保存)
在運(yùn)行好“Dynare基本應(yīng)用(1)”最后的模型文件后亿胸,屏幕會(huì)輸出如源代碼 15
所示:
%---- 源代碼 15-----%
Configuring Dynare ...
[mex] Generalized QZ.
[mex] Sylvester equation solution.
[mex] Kronecker products.
[mex] Sparse kronecker products.
[mex] Local state space iteration (second order).
[mex] Bytecode evaluation.
[mex] k-order perturbation solver.
[mex] k-order solution simulation.
[mex] Quasi Monte-Carlo sequence (Sobol).
[mex] Markov Switching SBVAR.
Using 64-bit preprocessor
Starting Dynare (version 4.5.7).
Starting preprocessing of the model file ...
Found 5 equation(s).
Evaluating expressions...done
Computing static model derivatives:
- order 1
Computing dynamic model derivatives:
- order 1
Processing outputs ...
done
Preprocessing completed.
這是Dynare的配置信息坯钦、文件預(yù)處理信息、運(yùn)行m文件等的輸出侈玄,初學(xué)者一般不需要糾結(jié)婉刀。
3.5.2 表征模型的Matlab文件
運(yùn)行dynare
命令后,將輸入的模型文件拗馒,以具體情況會(huì)生成如下的幾個(gè)或全部Matlab的m文件:
GrothApproximate.m:主文件路星,直接運(yùn)行該文件,可以完成模型文件所需要的全部目的,從而在沒(méi)有改動(dòng)文件結(jié)構(gòu)的前提下洋丐,直接運(yùn)行該m文件可以完全節(jié)省預(yù)編譯的時(shí)間
GrothApproximate_static.m:靜態(tài)模型文件呈昔,包括長(zhǎng)期靜態(tài)均衡條件,可用于計(jì)算穩(wěn)態(tài)
GrowthApproximate_dynamic.m:動(dòng)態(tài)模型文件
GrothApproximate_steadystate2.m:輔助變量文件友绝,即模型中出現(xiàn) 或 等情形時(shí)會(huì)生成的文件
初學(xué)者一般不需要糾結(jié)堤尾。
3.6 Dynare的解的表示
求解完成后,Dynare的最終計(jì)算結(jié)果會(huì)出現(xiàn)在Matlab的屏幕上迁客,包含求解結(jié)果信息(即政策函數(shù)與轉(zhuǎn)換方程)郭宝。同時(shí),Dynare也會(huì)按照一定的規(guī)則將求解結(jié)果儲(chǔ)存構(gòu)數(shù)組中掷漱。本節(jié)將使用3.1節(jié)的RBC模型來(lái)講述Dynare的一階和二階求解表示及其后續(xù)調(diào)用粘室。
這里只介紹一階解的表示方法,二階解在表示方法的本質(zhì)上是相同的卜范,請(qǐng)參考教材
3.6.1 一階解表示
Dynare求解的最根本的目的就是找到模型的政策函數(shù)衔统。前文(參考教材的頭幾章)已經(jīng)提到,Dynare關(guān)于一階近似解有如下的經(jīng)典表達(dá)形式:
假設(shè)模型的內(nèi)生變量個(gè)數(shù)為 海雪,狀態(tài)變量的個(gè)數(shù)為 锦爵,外生沖擊的個(gè)數(shù)為 ,根據(jù)《Dynare Reference Manual》奥裸,有:
表示內(nèi)生變量的穩(wěn)態(tài)值险掀,為 行 列向量,儲(chǔ)存在
oo_.dr.ys
中表示狀態(tài)變量的系數(shù)矩陣湾宙,為 行 列矩陣樟氢,儲(chǔ)存在
oo_.dr.ghx
中表示外生沖擊的系數(shù)矩陣,為 行 列矩陣侠鳄,儲(chǔ)存在
oo_.dr.ghu
中
根據(jù)表述嗡害,以3.1節(jié)的RBC模型為例,內(nèi)生變量的個(gè)數(shù) 畦攘,狀態(tài)變量的個(gè)數(shù) (參考霸妹,狀態(tài)變量個(gè)數(shù)是混合變量
和后向變量
之和,即出現(xiàn)了項(xiàng)的變量的數(shù)量)知押,外生沖擊的個(gè)數(shù) 叹螟。則根據(jù)變量聲明的順序和Matlab的運(yùn)行結(jié)果,解的表示應(yīng)該是:
如果進(jìn)一步觀察Dynare在Matlab結(jié)果輸出的解的表示台盯,會(huì)發(fā)現(xiàn)上述由表示得到的結(jié)果與Matlab輸出的結(jié)果完全一致(注意:本程序跑出來(lái)的結(jié)果與教材給的計(jì)算結(jié)果 有所出入罢绽,但除 外并無(wú)較大誤差,原因不明):
POLICY AND TRANSITION FUNCTIONS
c k lab z I
Constant 1.491629 29.288821 0.291594 0 0.351466
k(-1) 0.027972 0.978257 -0.001831 0 -0.009743
z(-1) 0.610801 1.876605 0.194192 0.950000 1.876605
e 0.006429 0.019754 0.002044 0.010000 0.019754
注意:前文已經(jīng)提到静盅,存量變量
在模型中的 和 良价,在模型文件中要寫(xiě)成 k
和 k(-1)
的形式
在Dynare中寝殴,如果變量均以聲明順序排序,那么 存儲(chǔ)在 oo_.dr.ghx(oo_.dr.inv_order_var,:)
中明垢,而 則存儲(chǔ)在 oo_.dr.ghu(oo_.dr.inv_order_var,:)
中蚣常。
這里的(oo_.dr.inv_order_var,:)
是為了使輸出的順序與聲明順序相同∪可以在模型文件執(zhí)行完畢后抵蚊,直接在Matlab運(yùn)行:
>> g_y = oo_.dr.ghx(oo_.dr.inv_order_var,:)
g_y =
0.0280 0.6108
0.9783 1.8766
-0.0018 0.1942
0 0.9500
-0.0097 1.8766
>> g_y = oo_.dr.ghx
g_y =
-0.0097 1.8766
0.9783 1.8766
0 0.9500
0.0280 0.6108
-0.0018 0.1942
3.6.2 二階解的表示
本質(zhì)上跟一階其實(shí)一樣的,只是解的調(diào)用有點(diǎn)區(qū)別溯革,請(qǐng)自己參考教材??贞绳!
3.7 求解結(jié)果分析和調(diào)用
上一節(jié)介紹了政策函數(shù)的表示,已經(jīng)設(shè)計(jì)如何調(diào)用求解的部分結(jié)果致稀,本節(jié)繼續(xù)介紹其他結(jié)果的調(diào)用冈闭。
3.7.1 屏幕輸出結(jié)果
請(qǐng)自行查看教材
3.7.2 儲(chǔ)存結(jié)果
Dyanre會(huì)將大部分計(jì)算結(jié)果以結(jié)構(gòu)數(shù)組的形式儲(chǔ)存下來(lái),這些結(jié)果主要有三大類抖单,分別儲(chǔ)存在M_
拒秘、oo
、options_
這三個(gè)結(jié)構(gòu)數(shù)組中臭猜。為了方便調(diào)用,Dynare會(huì)將這些數(shù)組以.mat
的形式保存在硬盤(pán)上押蚤。
(1) 模型信息數(shù)組M_
數(shù)組M_
幾乎保存了所有模型有關(guān)的基本解析信息蔑歌,比較常用的如表3.3所示:
(2) 計(jì)算和模擬結(jié)果數(shù)組oo_
模型計(jì)算的大部分結(jié)果都被儲(chǔ)存在oo_
中,教材稱之為“結(jié)果數(shù)組”揽碘,較為常用的如表3.4所示:
下面是對(duì)表3.4中各個(gè)字段的解釋(請(qǐng)?jiān)谶\(yùn)行“”最后的代碼后試驗(yàn)下面的代碼):
-
oo_.exo_simul
儲(chǔ)存著外生沖擊的模擬樣本(或稱為模擬路徑)次屠。模型樣本一般是從正態(tài)分布中隨機(jī)抽取,均值為0雳刺,方差由外生沖擊模塊指定劫灶。一般情況下,外生沖擊的穩(wěn)態(tài)為0掖桦,從而oo_.exo_steady_state
一般為0向量本昏。在Matlab窗口中運(yùn)行plot(oo_.exo_simul)
,有:
而運(yùn)行oo_.exo_steady_state
則有
>> oo_.exo_steady_state
ans =
0
-
oo_.endo_simul
儲(chǔ)存著內(nèi)生變量的模擬路徑枪汪,同時(shí)以個(gè)內(nèi)生變量的名稱為數(shù)組的名稱為數(shù)組名稱涌穆。請(qǐng)運(yùn)行oo_.endo_simul(1,:)
,可以得到:
oo_.dr
儲(chǔ)存著決策函數(shù)中各變量的系數(shù)矩陣雀久,這一點(diǎn)在3.6節(jié)已經(jīng)闡述過(guò)oo_.steady_state
儲(chǔ)存著各內(nèi)生變量的穩(wěn)態(tài)值宿稀,它跟oo_.dr.ys
完全一樣:
>> oo_.steady_state
ans =
1.4916
29.2888
0.2916
0
0.3515
>> oo_.dr.ys
ans =
1.4916
29.2888
0.2916
0
0.3515
-
oo_.autocorr
則儲(chǔ)存著內(nèi)生變量之間的相關(guān)系數(shù),具體含義如下:
其中赖捌, 是自相關(guān)數(shù)組中的第 個(gè)自相關(guān)矩陣祝沸,表示滯后階數(shù)。默認(rèn)情況下最大滯后階數(shù)為5階,也就是說(shuō)自相關(guān)數(shù)組中默認(rèn)有5個(gè)自相關(guān)矩陣罩锐。 奉狈、 分別表示第 、 個(gè)內(nèi)生變量(以聲明順序排序)唯欣。比如嘹吨,運(yùn)行cell2mat(oo_.autocorr(1))
可以得到:
>> cell2mat(oo_.autocorr(1))
ans =
0.9918 0.9435 0.4391 0.7621 0.6086
0.9645 0.9983 0.1786 0.5618 0.3721
0.3776 0.1106 0.9328 0.8428 0.9090
0.7175 0.5033 0.8694 0.9496 0.9284
0.5542 0.3074 0.9221 0.9143 0.9387
-
oo_.irfs
儲(chǔ)存著各內(nèi)生變量的脈沖響應(yīng),其長(zhǎng)度(期數(shù))由命令的選項(xiàng)irf
指定境氢。脈沖響應(yīng)的命名規(guī)則為Variable_Name_Shock_Name
蟀拷。比如c_e
表示變量 關(guān)于外生沖擊 的脈沖響應(yīng)。例如萍聊,直接運(yùn)行c_e
可以得到消費(fèi) 對(duì)技術(shù)沖擊 的脈沖響應(yīng)圖:
(3) 選項(xiàng)數(shù)組 options_
選項(xiàng)數(shù)組options_
儲(chǔ)存著和模擬計(jì)算相關(guān)的各種細(xì)節(jié)型設(shè)定问芬。初學(xué)者不必糾結(jié)。