【
】
此文內(nèi)容為《動(dòng)態(tài)隨機(jī)一般均衡(DSGE)模型》的筆記,李向陽(yáng)老師著,清華大學(xué)出版社出版。
我只將個(gè)人會(huì)用到的知識(shí)作了筆記,并對(duì)教材較難理解的部分做了進(jìn)一步闡述。為了更易于理解,我還對(duì)教材上的一些部分(包括代碼和正文)做了修改。
僅供學(xué)習(xí)參考,請(qǐng)勿轉(zhuǎn)載,侵刪!
上一篇有關(guān)Dyanre的文章為大家介紹了有關(guān)log-level、Dynare解的表示、計(jì)算結(jié)果的保存等一系列內(nèi)容。在這篇文章,我會(huì)總結(jié)有關(guān)DSGE的確定性模擬技術(shù)。
3.8 確定性模擬
確定性模擬和隨機(jī)模擬是模型分析的重要內(nèi)容和方法,是在參數(shù)估計(jì)和模型求解之后必須要進(jìn)行的操作。不論是確定性模擬還是隨機(jī)模擬,都必須是模型結(jié)構(gòu)參數(shù)已知并且模型已經(jīng)被求解的基礎(chǔ)上才能進(jìn)行的。
在開(kāi)始模擬之前,還有一些準(zhǔn)備工作:
- 首先,在大多數(shù)情況下,不論是確定性模擬還是隨機(jī)模擬,都需要提供
初始條件(Initial Condition),某些情況下還需要提供終止條件(Terminal Condition)。
初始條件和終止條件一般是指內(nèi)生變量和外生變量的
初值和終值。
- 另外,根據(jù)問(wèn)題分析的需要,指定外生沖擊的變化特征包括外生沖擊的大小、外生沖擊的方差、外生沖擊的持續(xù)周期等。
3.8.1 初始條件和終止條件
一般來(lái)說(shuō),初值設(shè)定的目標(biāo)有兩個(gè):
- 為隨機(jī)模擬和確定性模擬的計(jì)算提供穩(wěn)態(tài)值,提供一個(gè)初始的出發(fā)點(diǎn)
通常,如果模型的內(nèi)生變量穩(wěn)態(tài)很容易求出,則可以直接將穩(wěn)態(tài)值作為初值,這樣會(huì)提升計(jì)算效率
- 為確定性模擬提供初值
終值的設(shè)定并不是專指設(shè)定模擬后各期的值。如果設(shè)置終值,它會(huì)覆蓋初值的部分設(shè)定
在Dynare中,模擬始于第1期,在模擬開(kāi)始之前的一期為第0期,模型開(kāi)始之前的第2期為負(fù)1期,以此類推。初值就是第0期及以前各期的值,終止即T+1期及以后各期的值。

假設(shè)總模擬期數(shù)是 ,模擬期是指
到
期,模擬后的第一期是指
期。一般情況下,Dynare在儲(chǔ)存模擬結(jié)果(確定性模擬)時(shí),不僅考慮模擬器,而且考慮模擬前和模擬后各一期,因此一共有
期。所以,如果畫(huà)此模擬路徑,則往往會(huì)首尾出現(xiàn)跳躍的情況。這是因?yàn)樵O(shè)定值通常和模擬計(jì)算的結(jié)果存在較大的差異。
在Dynare中,設(shè)定初值和終值分別使用關(guān)鍵字 initval 和 endval,并使用 end 關(guān)鍵字結(jié)束初值和終值的設(shè)定,如下表3.5所示。一般來(lái)說(shuō),所有內(nèi)生變量和外生變量都要設(shè)定初值,否則默認(rèn)為0;而終值設(shè)定則不是必須的。

在確定性模擬中,使用 initval 模塊設(shè)定初值是對(duì) 第0期 及其之前的各期設(shè)定取值。沒(méi)有使用 endval 模塊時(shí), initval 模塊設(shè)定的初值將作為模擬后各期的取值,同時(shí)也作為模擬計(jì)算的初值。理解這一點(diǎn)非常重要!
如果 initval 模塊后緊接著 steady 命令,那么 initval 模塊的作用將發(fā)生變化:
首先,
steady命令將使用initval模塊提供的初值作為初始猜測(cè)值以計(jì)算穩(wěn)態(tài)然后,Dynare將剛剛計(jì)算的穩(wěn)態(tài)值作為模擬的初值
如果使用 endval 模塊設(shè)定終值,將會(huì)覆蓋部分 initval 的功能:終值優(yōu)先用于設(shè)定模擬后各期的值,而不管 initval 的初始如何設(shè)定。如果某些變量在 endval 中沒(méi)有設(shè)定,那么其取值于上一個(gè) initval 模塊或 steady 命令穩(wěn)態(tài)值。
此外,當(dāng) steady 命令結(jié)合 initval 和 endval 同時(shí)使用時(shí),Dynare輸出兩個(gè)穩(wěn)態(tài)值,這是分別給予初始和終值的設(shè)定計(jì)算出來(lái)的。如果兩個(gè)模塊中的外生變量的值有差異,那么兩個(gè)穩(wěn)態(tài)值一般不同。initval 模塊對(duì)應(yīng)的穩(wěn)態(tài)值被設(shè)定為初值,endval 模塊對(duì)應(yīng)的穩(wěn)態(tài)值被設(shè)定為終值。
3.8.2 穩(wěn)態(tài)求解命令:steady
計(jì)算穩(wěn)態(tài)值是非線性模型求解的一個(gè)非常具有挑戰(zhàn)性的問(wèn)題。在Dynare中,steady命令被用來(lái)求解模型的穩(wěn)態(tài)值。
具體來(lái)說(shuō),
steady命令使用一個(gè)非線性的牛頓遞歸算法,以initval或endval模塊中聲明的內(nèi)生和外生變量的值作為初始值來(lái)求解穩(wěn)態(tài)。
通常來(lái)說(shuō),較為復(fù)雜(甚至簡(jiǎn)單)的模型,Dynare都無(wú)法準(zhǔn)確地求出穩(wěn)態(tài)值,這可能是因?yàn)槌跏贾惦x穩(wěn)態(tài)值太遠(yuǎn),或默認(rèn)求解的遞歸算法并不合適。經(jīng)驗(yàn)表明,完全依靠Dyanre來(lái)計(jì)算模型的穩(wěn)態(tài)值,幾乎行不通。所以,求解模型的穩(wěn)態(tài)值,大部分只能靠手動(dòng)編程實(shí)現(xiàn)。
在Dynare具體編程時(shí),穩(wěn)態(tài)求解通常采取以下幾種常見(jiàn)的模式:
-
方法一:自定義穩(wěn)態(tài)參數(shù)
這是最常用的方法,特別合適中小規(guī)模的模型,而且要求穩(wěn)態(tài)值能夠方便地計(jì)算,具有解析解。使用這種處理方式,允許方便地循環(huán)調(diào)用模型文件來(lái)進(jìn)行某個(gè)或某些參數(shù)的敏感性測(cè)試。其基本邏輯是:
對(duì)每一個(gè)內(nèi)生變量定義一個(gè)穩(wěn)態(tài)參數(shù),比如消費(fèi)
,定義穩(wěn)態(tài)參數(shù)為
Css。然后編程計(jì)算
Css的值,這要求內(nèi)生變量的穩(wěn)態(tài)值具有解析式。然后
initval模塊直接將Css的值賦給即可
直接將穩(wěn)態(tài)值賦給內(nèi)生變量,省去了Dynare自行求解穩(wěn)態(tài)值的繁瑣過(guò)程。在
源代碼 20中,甚至直接省去了steady命令,直接使用stoch_simul命令來(lái)計(jì)算穩(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)計(jì)算的內(nèi)置模塊命令提供了更加靈活、可靠的穩(wěn)態(tài)值計(jì)算方式,這是計(jì)算穩(wěn)態(tài)的第二個(gè)辦法。相比于第一種方法,此方法更為便捷,甚至不需要自行定義任何穩(wěn)態(tài)參數(shù)。在某些情況下,此命令十分有用。
這種方法的局限性在于,該方法同樣要求內(nèi)生變量穩(wěn)態(tài)值具有解析解的形式或數(shù)值求解。也即同樣只適用于中小模型。對(duì)于不具有解析解或求解穩(wěn)態(tài)非常困難的模型,不推薦使用。
-
方法三:外部M文件
對(duì)于復(fù)雜的模型,通常使用自定義的外部穩(wěn)態(tài)計(jì)算文件是一種選擇,也是穩(wěn)態(tài)計(jì)算的第3種方法。使用外部M文件,通常需要遵循一定的約定:
首先,外部M文件的名稱必須滿足形式
filename_steadystate.mM文件的書(shū)寫(xiě)必須遵循一定的格式
在教材的 5.8 金融加速器與隨機(jī)波動(dòng)模型示例 會(huì)對(duì)外部M文件技術(shù)進(jìn)行講解。
3.8.3 確定性模擬
確定性模擬()具體而言就是說(shuō):通過(guò)外生沖擊的確定性變化過(guò)程來(lái)考察系統(tǒng)的變化。即,系統(tǒng)是如何返回原來(lái)的均衡的或者如何達(dá)到另外一個(gè)新均衡的。
比如,在某一期或第幾期突然施加一個(gè)外生沖擊來(lái)考察各內(nèi)生變量在外生沖擊發(fā)生后的變化路徑和趨勢(shì),畫(huà)出脈沖響應(yīng)圖,以直觀觀測(cè)外生沖擊的影響。
1 確定性「模型」和隨機(jī)「模型」
確定性模型是指(1)模型中不存在隨機(jī)的外生沖擊 (2)存在外生沖擊,但其實(shí)完全可見(jiàn)。也就是所說(shuō)的完全信息。
隨機(jī)模型是值模型中存在隨機(jī)的外生沖擊,形式上模型不僅存在期望算子和外生沖擊的概率分布,而且外生沖擊的方差不能為0。
區(qū)別確定性模型和隨機(jī)模型的一個(gè)關(guān)鍵的判斷標(biāo)準(zhǔn)就是對(duì)外生沖擊的定義。以下舉例說(shuō)明:假設(shè)模型中存在一個(gè)外生的技術(shù)沖擊變量, 滿足獨(dú)立同分布,
第一,如果
,此時(shí)完全沒(méi)有外生沖擊,是確定性模型;
第二,如果
,外生沖擊被完全預(yù)期,是確定性模型
第三,如果
,則外生沖擊不能被完全預(yù)期,是隨機(jī)模型
2 確定性模擬的4種類型
根據(jù)外生沖擊的:
可預(yù)期性
變化長(zhǎng)短類型
可以將確定性模擬分成4個(gè)類型,這需要通過(guò)Dyanre的幾個(gè)命令:
初值命令
initval終值命令
endval沖擊命令
shocks模擬命令
simul
的組合才能實(shí)現(xiàn)。見(jiàn)表3.6:

3 外生沖擊模塊設(shè)定:shocks
在Dynare中,外生沖擊是指由 varexo 定義的變量。確定性模擬使用外生沖擊模塊設(shè)定外生沖擊的暫時(shí)性變化,而永久性變化則需要 endval 模塊來(lái)定義。
確定性模擬和隨機(jī)模擬的外生沖擊設(shè)定方式在Dyanre中不完全相同,如表3.7所示:

從語(yǔ)法看,也可以悟出隨機(jī)模擬的內(nèi)在含義:由于沒(méi)有 periods 關(guān)鍵字以指定外生沖擊出現(xiàn)的時(shí)間,所以外生沖擊每一期都存在,而且是隨機(jī)抽取。
這有別于脈沖響應(yīng)函數(shù)。因?yàn)槊}沖響應(yīng)函數(shù)計(jì)算時(shí),雖然也要隨機(jī)模擬,但外生沖擊僅發(fā)生在第一期,以后各期為0。
4 Dynare確定性模擬命令:Simul
Simul命令根據(jù)既定設(shè)置,求解非線性聯(lián)立方程,得到模擬值。首先分析simul的求解邏輯,然后再分析simul命令的語(yǔ)法。
(1) 求解邏輯
一般來(lái)說(shuō),確定性模型具有以下的一般形式:
其中, 為內(nèi)生變量(向量),
為外生沖擊(向量)。假設(shè)模型具有穩(wěn)態(tài)
,滿足:
其中, 為外生變量的穩(wěn)態(tài)值;Dynare使用
steady 命令來(lái)計(jì)算模型的穩(wěn)態(tài)值。
通常情況下, 在模擬開(kāi)始前即第0期,通常假設(shè)系統(tǒng)處于穩(wěn)態(tài)。在接下來(lái)的第1期即模擬的開(kāi)始,外生沖擊已經(jīng)完全確定。模擬的基本目的就在于分析系統(tǒng)在外生沖擊下的變化路徑,是回歸原始均衡還是達(dá)到一個(gè)新的均衡。
確定性模擬事實(shí)上是基于兩個(gè)邊界的數(shù)值求解問(wèn)題。Dynare實(shí)際上是使用了一個(gè)有限期模型來(lái)近似逼近無(wú)限期模型,從而實(shí)現(xiàn)數(shù)值求解。具體來(lái)說(shuō),Dynare求解如下的非線性聯(lián)立方程(Stack System)來(lái)確定模擬計(jì)算:
其中, 為模擬的總期數(shù)。Dynare將使用牛頓算法來(lái)求解該聯(lián)立方程組。
(2) simul的語(yǔ)法
相比于隨機(jī)模擬的命令 stoch_simul ,確定性模擬命令 simul 要簡(jiǎn)單得多,使用的選項(xiàng)很少。
simul (options) ...;
確定性模擬的 options 只有6個(gè),但最常用的只有 periods 一個(gè)。
3.8.4 介紹一個(gè)完整的例子
我們來(lái)看一個(gè)完整的例子:帶有投資的新古典增長(zhǎng)模型。
(1)建模
假設(shè)家庭選擇消費(fèi)、勞動(dòng)和資本存量來(lái)最大化終身貼現(xiàn)效用;
-
生產(chǎn)函數(shù)和效用函數(shù)方面。
生產(chǎn)函數(shù)為
形式:
效用函數(shù)為消費(fèi)和勞動(dòng)不可分函數(shù):
-
變量方面
、
、
、
分別為消費(fèi)、勞動(dòng)、資本存量、產(chǎn)出,屬內(nèi)生變量
為技術(shù)沖擊,屬外生變量
-
參數(shù)方面
為折現(xiàn)率
為效用函數(shù)中消費(fèi)的權(quán)重
為風(fēng)險(xiǎn)厭惡參數(shù)
為資本存量的產(chǎn)出份額
為生產(chǎn)函數(shù)中資本存量和勞動(dòng)的替代彈性參數(shù)
為折舊率
為技術(shù)沖擊的自回歸系數(shù)
為資技術(shù)沖擊的方差
(2)求解消費(fèi)者行為
-
采用
方法求解,對(duì)三個(gè)
決策變量求導(dǎo),有::
:
:
(3)總結(jié)
消去,最終得出系統(tǒng)的動(dòng)力學(xué)方程由5個(gè)內(nèi)生變量
、
、
、
、
以及5個(gè)均衡條件:
(4)敲代碼
為了便于編程,把偏導(dǎo)數(shù)的部分先計(jì)算出來(lái):
完整的代碼示例如下所示(可以直接復(fù)制運(yùn)行)
/*
* 教材源代碼24 確定性模擬(預(yù)期的永久性沖擊)
* Modified by 愛(ài)吃漢堡薯?xiàng)l based on Xiangyang Li@SCC, 2020/3/30
* 與書(shū)本上的不同,本代碼更加直觀
*/
close all; % 關(guān)掉所有現(xiàn)存的figures
%---- 定義變量部分 ----%
// 定義內(nèi)生變量
var
C, // 消費(fèi)
N, // 勞動(dòng)
Y, // 總產(chǎn)出
K, // 資本存量
A // 技術(shù)水平
;
// 定義外生變量
varexo
epsA // 技術(shù)擾動(dòng)
;
// 定義參數(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; // 消費(fèi)在效用函數(shù)中的權(quán)重
tau = 2; // 風(fēng)險(xiǎn)規(guī)避系數(shù)
alpha = 0.35; // 資本占生產(chǎn)中的比例
psi = -0.1; // 資本和勞動(dòng)的替代彈性
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) 勞動(dòng)供給方程
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)過(guò)程
log(A) = log(tech_s) + rho*log(A(-1)) + epsA;
end;
%---- 初值設(shè)定部分 ----%
% 教材的代碼是使用 `steady_state_model;` 命令計(jì)算的穩(wěn)態(tài)
% 我這里是直接把教材代碼算出來(lá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;
%---- 計(jì)算穩(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)出、消費(fèi)
和資本存量
的變化如下脈沖響應(yīng)圖所示:



對(duì)于不同的沖擊類型和預(yù)期,只需要參考表3.6進(jìn)行修改即可!