【
】
此文內(nèi)容為《動態(tài)隨機(jī)一般均衡(DSGE)模型》的筆記贾费,李向陽老師著褂萧,清華大學(xué)出版社出版唱凯。
我只將個人會用到的知識作了筆記,并對教材較難理解的部分做了進(jìn)一步闡述票从。為了更易于理解纫骑,我還對教材上的一些部分(包括代碼和正文)做了修改。
僅供學(xué)習(xí)參考煤墙,請勿轉(zhuǎn)載,侵刪脚作!
上一篇有關(guān)Dyanre的文章為大家介紹了有關(guān)log-level
、Dynare解的表示
亿扁、計算結(jié)果的保存
等一系列內(nèi)容。在這篇文章牍陌,我會總結(jié)有關(guān)DSGE的確定性模擬
技術(shù)。
3.8 確定性模擬
確定性模擬
和隨機(jī)模擬
是模型分析的重要內(nèi)容和方法链嘀,是在參數(shù)估計和模型求解之后必須要進(jìn)行的操作怀泊。不論是確定性模擬還是隨機(jī)模擬,都必須是模型結(jié)構(gòu)參數(shù)已知并且模型已經(jīng)被求解的基礎(chǔ)上才能進(jìn)行的误趴。
在開始模擬之前霹琼,還有一些準(zhǔn)備工作:
- 首先,在大多數(shù)情況下凉当,不論是確定性模擬還是隨機(jī)模擬枣申,都需要提供
初始條件
(Initial Condition)看杭,某些情況下還需要提供終止條件
(Terminal Condition)忠藤。
初始條件和終止條件一般是指內(nèi)生變量和外生變量的
初值
和終值
。
- 另外楼雹,根據(jù)問題分析的需要模孩,指定外生沖擊的變化特征包括外生沖擊的大小、外生沖擊的方差贮缅、外生沖擊的持續(xù)周期等榨咐。
3.8.1 初始條件
和終止條件
一般來說,初值設(shè)定的目標(biāo)有兩個:
- 為隨機(jī)模擬和確定性模擬的計算提供穩(wěn)態(tài)值谴供,提供一個初始的出發(fā)點
通常块茁,如果模型的內(nèi)生變量穩(wěn)態(tài)很容易求出,則可以直接將穩(wěn)態(tài)值作為初值桂肌,這樣會提升計算效率
- 為確定性模擬提供初值
終值的設(shè)定并不是專指設(shè)定模擬后各期的值数焊。如果設(shè)置終值,它會覆蓋初值的部分設(shè)定
在Dynare中轴或,模擬始于第1期
昌跌,在模擬開始之前的一期為第0期
,模型開始之前的第2期為負(fù)1期
照雁,以此類推蚕愤。初值就是第0期
及以前各期的值,終止即T+1
期及以后各期的值饺蚊。
假設(shè)總模擬期數(shù)是 萍诱,模擬期是指
到
期,模擬后的第一期是指
期污呼。一般情況下裕坊,Dynare在儲存模擬結(jié)果(確定性模擬)時,不僅考慮模擬器燕酷,而且考慮模擬前和模擬后各一期籍凝,因此一共有
期周瞎。所以,如果畫此模擬路徑饵蒂,則往往會首尾出現(xiàn)跳躍的情況声诸。這是因為設(shè)定值通常和模擬計算的結(jié)果存在較大的差異。
在Dynare中退盯,設(shè)定初值和終值分別使用關(guān)鍵字 initval
和 endval
彼乌,并使用 end
關(guān)鍵字結(jié)束初值和終值的設(shè)定,如下表3.5所示渊迁。一般來說慰照,所有內(nèi)生變量和外生變量都要設(shè)定初值,否則默認(rèn)為0琉朽;而終值設(shè)定則不是必須的毒租。
在確定性模擬中,使用 initval
模塊設(shè)定初值是對 第0期
及其之前的各期設(shè)定取值漓骚。沒有使用 endval
模塊時蝌衔, initval
模塊設(shè)定的初值將作為模擬后各期的取值,同時也作為模擬計算的初值蝌蹂。理解這一點非常重要噩斟!
如果 initval
模塊后緊接著 steady
命令,那么 initval
模塊的作用將發(fā)生變化:
首先孤个,
steady
命令將使用initval
模塊提供的初值作為初始猜測值以計算穩(wěn)態(tài)然后剃允,Dynare將剛剛計算的穩(wěn)態(tài)值作為模擬的初值
如果使用 endval
模塊設(shè)定終值,將會覆蓋部分 initval
的功能:終值優(yōu)先用于設(shè)定模擬后各期的值齐鲤,而不管 initval
的初始如何設(shè)定斥废。如果某些變量在 endval
中沒有設(shè)定,那么其取值于上一個 initval
模塊或 steady
命令穩(wěn)態(tài)值给郊。
此外牡肉,當(dāng) steady
命令結(jié)合 initval
和 endval
同時使用時,Dynare輸出兩個穩(wěn)態(tài)值淆九,這是分別給予初始和終值的設(shè)定計算出來的统锤。如果兩個模塊中的外生變量的值有差異,那么兩個穩(wěn)態(tài)值一般不同炭庙。initval
模塊對應(yīng)的穩(wěn)態(tài)值被設(shè)定為初值饲窿,endval
模塊對應(yīng)的穩(wěn)態(tài)值被設(shè)定為終值。
3.8.2 穩(wěn)態(tài)求解命令:steady
計算穩(wěn)態(tài)值是非線性模型求解的一個非常具有挑戰(zhàn)性的問題焕蹄。在Dynare中逾雄,steady
命令被用來求解模型的穩(wěn)態(tài)值。
具體來說,
steady
命令使用一個非線性的牛頓遞歸算法鸦泳,以initval
或endval
模塊中聲明的內(nèi)生和外生變量的值作為初始值來求解穩(wěn)態(tài)银锻。
通常來說,較為復(fù)雜(甚至簡單)的模型做鹰,Dynare都無法準(zhǔn)確地求出穩(wěn)態(tài)值徒仓,這可能是因為初始值離穩(wěn)態(tài)值太遠(yuǎn),或默認(rèn)求解的遞歸算法并不合適誊垢。經(jīng)驗表明,完全依靠Dyanre來計算模型的穩(wěn)態(tài)值症见,幾乎行不通喂走。所以,求解模型的穩(wěn)態(tài)值谋作,大部分只能靠手動編程實現(xiàn)芋肠。
在Dynare具體編程時,穩(wěn)態(tài)求解通常采取以下幾種常見的模式:
-
方法一:自定義穩(wěn)態(tài)參數(shù)
這是最常用的方法遵蚜,特別合適中小規(guī)模的模型帖池,而且要求穩(wěn)態(tài)值能夠方便地計算,具有解析解吭净。使用這種處理方式睡汹,允許方便地循環(huán)調(diào)用模型文件來進(jìn)行某個或某些參數(shù)的敏感性測試。其基本邏輯是:
對每一個內(nèi)生變量定義一個穩(wěn)態(tài)參數(shù)寂殉,比如消費
囚巴,定義穩(wěn)態(tài)參數(shù)為
Css
。然后編程計算
Css
的值友扰,這要求內(nèi)生變量的穩(wěn)態(tài)值具有解析式彤叉。然后
initval
模塊直接將Css
的值賦給即可
直接將穩(wěn)態(tài)值賦給內(nèi)生變量,省去了Dynare自行求解穩(wěn)態(tài)值的繁瑣過程村怪。在
源代碼 20
中秽浇,甚至直接省去了steady
命令,直接使用stoch_simul
命令來計算穩(wěn)態(tài)值:var C ...; varexo epsA; parameters alpha beta ...; model; ...; end; initval; C = Css; ...; end; stoch_simul;
-
方法二:內(nèi)置模塊命令
steady_state_model
穩(wěn)態(tài)計算的內(nèi)置模塊命令提供了更加靈活甚负、可靠的穩(wěn)態(tài)值計算方式柬焕,這是計算穩(wěn)態(tài)的第二個辦法。相比于第一種方法腊敲,此方法更為便捷击喂,甚至不需要自行定義任何穩(wěn)態(tài)參數(shù)。在某些情況下碰辅,此命令十分有用懂昂。
這種方法的局限性在于,該方法同樣要求內(nèi)生變量穩(wěn)態(tài)值具有解析解的形式或數(shù)值求解没宾。也即同樣只適用于中小模型凌彬。對于不具有解析解或求解穩(wěn)態(tài)非常困難的模型沸柔,不推薦使用。
-
方法三:外部M文件
對于復(fù)雜的模型铲敛,通常使用自定義的外部穩(wěn)態(tài)計算文件是一種選擇褐澎,也是穩(wěn)態(tài)計算的第3種方法。使用外部M文件伐蒋,通常需要遵循一定的約定:
首先工三,外部M文件的名稱必須滿足形式
filename_steadystate.m
M文件的書寫必須遵循一定的格式
在教材的 5.8 金融加速器與隨機(jī)波動模型示例 會對外部M文件技術(shù)進(jìn)行講解。
3.8.3 確定性模擬
確定性模擬()具體而言就是說:通過外生沖擊的確定性變化過程來考察系統(tǒng)的變化先鱼。即俭正,系統(tǒng)是如何返回原來的均衡的或者如何達(dá)到另外一個新均衡的。
比如焙畔,在某一期或第幾期突然施加一個外生沖擊來考察各內(nèi)生變量在外生沖擊發(fā)生后的變化路徑和趨勢掸读,畫出脈沖響應(yīng)圖,以直觀觀測外生沖擊的影響宏多。
1 確定性「模型」和隨機(jī)「模型」
確定性模型是指(1)模型中不存在隨機(jī)的外生沖擊 (2)存在外生沖擊儿惫,但其實完全可見。也就是所說的完全信息伸但。
隨機(jī)模型是值模型中存在隨機(jī)的外生沖擊肾请,形式上模型不僅存在期望算子和外生沖擊的概率分布,而且外生沖擊的方差不能為0砌烁。
區(qū)別確定性模型和隨機(jī)模型的一個關(guān)鍵的判斷標(biāo)準(zhǔn)就是對外生沖擊的定義筐喳。以下舉例說明:假設(shè)模型中存在一個外生的技術(shù)沖擊變量, 滿足獨立同分布函喉,
第一避归,如果
,此時完全沒有外生沖擊管呵,是確定性模型梳毙;
第二,如果
捐下,外生沖擊被完全預(yù)期账锹,是確定性模型
第三,如果
坷襟,則外生沖擊不能被完全預(yù)期奸柬,是隨機(jī)模型
2 確定性模擬的4種類型
根據(jù)外生沖擊的:
可預(yù)期性
變化長短類型
可以將確定性模擬分成4個類型,這需要通過Dyanre的幾個命令:
初值命令
initval
終值命令
endval
沖擊命令
shocks
模擬命令
simul
的組合才能實現(xiàn)婴程。見表3.6:
3 外生沖擊模塊設(shè)定:shocks
在Dynare中廓奕,外生沖擊是指由 varexo
定義的變量。確定性模擬使用外生沖擊模塊設(shè)定外生沖擊的暫時性變化,而永久性變化則需要 endval
模塊來定義桌粉。
確定性模擬和隨機(jī)模擬的外生沖擊設(shè)定方式在Dyanre中不完全相同蒸绩,如表3.7所示:
從語法看,也可以悟出隨機(jī)模擬的內(nèi)在含義:由于沒有 periods
關(guān)鍵字以指定外生沖擊出現(xiàn)的時間铃肯,所以外生沖擊每一期都存在患亿,而且是隨機(jī)抽取。
這有別于脈沖響應(yīng)函數(shù)押逼。因為脈沖響應(yīng)函數(shù)計算時步藕,雖然也要隨機(jī)模擬,但外生沖擊僅發(fā)生在第一期挑格,以后各期為0漱抓。
4 Dynare確定性模擬命令:Simul
Simul
命令根據(jù)既定設(shè)置,求解非線性聯(lián)立方程恕齐,得到模擬值。首先分析simul
的求解邏輯瞬逊,然后再分析simul
命令的語法显歧。
(1) 求解邏輯
一般來說,確定性模型具有以下的一般形式:
其中确镊, 為內(nèi)生變量(向量)士骤,
為外生沖擊(向量)。假設(shè)模型具有穩(wěn)態(tài)
蕾域,滿足:
其中拷肌, 為外生變量的穩(wěn)態(tài)值;Dynare使用
steady
命令來計算模型的穩(wěn)態(tài)值旨巷。
通常情況下巨缘, 在模擬開始前即第0期
,通常假設(shè)系統(tǒng)處于穩(wěn)態(tài)采呐。在接下來的第1期
即模擬的開始若锁,外生沖擊已經(jīng)完全確定。模擬的基本目的就在于分析系統(tǒng)在外生沖擊下的變化路徑斧吐,是回歸原始均衡還是達(dá)到一個新的均衡又固。
確定性模擬事實上是基于兩個邊界的數(shù)值求解問題。Dynare實際上是使用了一個有限期模型來近似逼近無限期模型煤率,從而實現(xiàn)數(shù)值求解仰冠。具體來說,Dynare求解如下的非線性聯(lián)立方程(Stack System)來確定模擬計算:
其中蝶糯, 為模擬的總期數(shù)洋只。Dynare將使用牛頓算法來求解該聯(lián)立方程組。
(2) simul
的語法
相比于隨機(jī)模擬的命令 stoch_simul
,確定性模擬命令 simul
要簡單得多木张,使用的選項很少众辨。
simul (options) ...;
確定性模擬的 options
只有6個,但最常用的只有 periods
一個舷礼。
3.8.4 介紹一個完整的例子
我們來看一個完整的例子:帶有投資的新古典增長模型鹃彻。
(1)建模
假設(shè)家庭選擇消費、勞動和資本存量來最大化終身貼現(xiàn)效用妻献;
-
生產(chǎn)函數(shù)和效用函數(shù)方面蛛株。
生產(chǎn)函數(shù)為
形式:
效用函數(shù)為消費和勞動不可分函數(shù):
-
變量方面
、
育拨、
谨履、
分別為消費、勞動熬丧、資本存量笋粟、產(chǎn)出,屬內(nèi)生變量
為技術(shù)沖擊析蝴,屬外生變量
-
參數(shù)方面
為折現(xiàn)率
為效用函數(shù)中消費的權(quán)重
為風(fēng)險厭惡參數(shù)
為資本存量的產(chǎn)出份額
為生產(chǎn)函數(shù)中資本存量和勞動的替代彈性參數(shù)
為折舊率
為技術(shù)沖擊的自回歸系數(shù)
為資技術(shù)沖擊的方差
(2)求解消費者行為
-
采用
方法求解害捕,對三個
決策變量
求導(dǎo),有::
:
:
(3)總結(jié)
消去闷畸,最終得出系統(tǒng)的動力學(xué)方程由5個內(nèi)生變量
尝盼、
、
佑菩、
盾沫、
以及5個均衡條件:
(4)敲代碼
為了便于編程,把偏導(dǎo)數(shù)的部分先計算出來:
完整的代碼示例如下所示(可以直接復(fù)制運(yùn)行)
/*
* 教材源代碼24 確定性模擬(預(yù)期的永久性沖擊)
* Modified by 愛吃漢堡薯條 based on Xiangyang Li@SCC, 2020/3/30
* 與書本上的不同,本代碼更加直觀
*/
close all; % 關(guān)掉所有現(xiàn)存的figures
%---- 定義變量部分 ----%
// 定義內(nèi)生變量
var
C, // 消費
N, // 勞動
Y, // 總產(chǎn)出
K, // 資本存量
A // 技術(shù)水平
;
// 定義外生變量
varexo
epsA // 技術(shù)擾動
;
// 定義參數(shù)
parameters
beta,
delta,
rho,
sigma,
theta,
tau,
alpha,
psi,
tech_s
;
// 參數(shù)校準(zhǔn)
beta = 0.99; // 折現(xiàn)率
delta = 0.025; // 折舊率
rho = 0.85; // 自回歸系數(shù)
sigma = 0.01; // 沖擊的方差
theta = 0.35; // 消費在效用函數(shù)中的權(quán)重
tau = 2; // 風(fēng)險規(guī)避系數(shù)
alpha = 0.35; // 資本占生產(chǎn)中的比例
psi = -0.1; // 資本和勞動的替代彈性
tech_s = 1; // 技術(shù)的穩(wěn)態(tài)
%---- 模型定義部分 ----%
model;
// 首先定義便于編程的局部變量
# U_Ct = theta * ( C^theta * (1-N)^(1-theta) )^(-tau) * C^(theta-1);
# U_Ct1 = theta * ( C(+1)^theta * (1-N(+1))^(1-theta) )^(-tau) * C(+1)^(theta-1);
# U_Nt = -(1-theta)* ( C^theta * (1-N)^(1-theta) )^(-tau) * (1-N)^(-theta);
# F_Nt = (1-alpha) * ( alpha*K(-1)^psi + (1-alpha) * N^psi )^(1/psi-1) * N^(psi-1);
# F_Kt1 = alpha * ( alpha*K^psi + (1-alpha) * N(+1)^psi )^(1/psi-1) * K^(psi-1);
% (1) 歐拉方程
U_Ct = beta * U_Ct1 * (A(+1) * F_Kt1 + 1 - delta);
% (2) 勞動供給方程
A * F_Nt = -1 * U_Nt / U_Ct;
% (3) 生產(chǎn)函數(shù)
Y = A * (alpha * K^psi + (1-alpha) * N^psi)^(1/psi);
% (4) 資源約束條件
K = Y - C + (1-delta)*K(-1);
% (5) 水平技術(shù)沖擊AR(1)過程
log(A) = log(tech_s) + rho*log(A(-1)) + epsA;
end;
%---- 初值設(shè)定部分 ----%
% 教材的代碼是使用 `steady_state_model;` 命令計算的穩(wěn)態(tài)
% 我這里是直接把教材代碼算出來的穩(wěn)態(tài)值作為初值了
initval;
K = 6.93619;
Y = 0.857369;
N = 0.325829;
C = 0.683964;
A = 1;
end;
%---- 設(shè)置終值 ----%
endval;
epsA = (1-rho)*log(0.5);
end;
%---- 計算穩(wěn)態(tài) ----%
steady;
%---- 設(shè)置沖擊 ----%
shocks;
var epsA;
periods 40;
values 0.3;
end;
%---- 確定性模擬 ----%
simul(periods=150);
rplot C;
rplot K;
我在這里設(shè)置的是技術(shù)水平發(fā)生永久性變化(減小)息尺,并在第40期發(fā)生一次正的一次性技術(shù)沖擊,產(chǎn)出祖娘、消費
和資本存量
的變化如下脈沖響應(yīng)圖所示:
對于不同的沖擊類型和預(yù)期,只需要參考表3.6進(jìn)行修改即可啊奄!