作者为第五届华萌海外深造奖学金得主,现于伦敦政治经济学院攻读博士学位
伦敦政治经济学院
贾宁远
Dynare是经济学中常用的用来数值求解DSGE模型的工具,本文分享来自Universityof Notre Dame的Eric Sims的dynare使用笔记。
(一)模型设定考虑一个简单的DSGE模型:socialplanner的目标函数如下,最大化消费者一生的期望总效用。
社会生产函数为C-D生产函数形式,并使用资本和劳动作为投入,简化起见假设消费者每期均投入单位劳动力,即. 其中为全要素生产率(TFP),服从AR(1)的随机过程。
最终消费品也同时可用于投资,即social planner每期进行生产后,可决定将其中一部分用于消费以获得当期效用,剩余的进行投资用于增加下一期的资本。资本每期将会有的折旧,每一单位资本将会有单位资本可用于下一期的生产,因此有
social planner将会选择每期的消费来使得社会资源满足上述资源约束,并且消费者效用最大化。数学求解可知,最优解满足以下条件:
除了每期消费和投资之外,我们也想要研究每期实际利率,工资和资产回报率的变化情况,根据厂商利润最大化条件,实际利率,工资和资产回报率满足以下条件
在求解模型之前需要对参数进行设定,方便起见在此设,生产率变化的标准差设为0.01. 实际使用中需要根据现实数据识别参数。给定这些设定,我们将要研究每期最优消费和投资决策,以及每期变量随着生产率波动的变化趋势。
(二)模型时间设定
在使用dynare进行模型求解前,需要注意每个变量的时间设定。与我们一般公式书写中不同,在dynare中,每期的已知变量(比如期初资本存量)的时间角标为t-1而非t。因此为了使我们公式和dynare的模型设定一致,我们重新书写所有最优条件如下:
与上文对比可知,我们在此只是将改为了.
(三)Dynare程序
在求解完最优条件和设定完参数之后,我们可以将这些信息告诉dynare,dynare将根据这些求解出每期相应的变量。
Dynare程序编写的第一步是声明模型中需要求解的变量。在上述方程组中,我们需要求解的变量有消费,资本,产出,投资,各种价格.以及生产率。程序的第一行以var开头来声明变量,后面接所有变量的字母如下,并以分号结尾:
接下来需要声明外生变量,即这里对tfp的外生冲击,以varexo开头,后接所有的外生变量:
接下来需要声明模型预先给定的参数,以parameters开头,后接所有参数:
紧接着这条命令之后,需要对所有的参数进行赋值:
以上命令设定了模型所有变量和参数,接下来需要设定模型的最优条件:这部分以model开头,以end结尾,中间添加所有的模型条件。通常情况下我们会对模型对数化并研究各个变量对数化的变化而非其本身的变化,因此在声明模型时我们可以将变量写为exp(x)的形式来使dynare求解对数化后的变量值。由于每个变量均有时间角标,在dynare中对于时间t的变量,书写方式为该变量本身,即写为x。对于时间t-1的变量,需要加上”(-1)”,即写为x(-1). 对于时间t+1的变量,需要加上”(+1)”,即写为x(+1). 将上面所有最优条件写入dynare文件,该部分代码如下:
接下来需要告诉模型steady state或者其近似值,如果给定初始steady state过于离谱,dynare可能不会收敛并且报错。Dynare将会根据给定的steady state猜测值求解steady state。在给定steady state时,注意以上所有变量已经对数化,因此要给对数化之后的值。注:steady state的值为每个变量增长速率不在变化时的变量值。这部分代码以initval开头,end结尾,中间输入每个变量steady state的值或近似。
给定模型steady state猜测值之后,需要对模型外生冲击变量的波动程度(方差),这部分以shock开头,end结尾,中间用var来声明方差:
声明完冲击后,为了使dynare求解steady state,我们在下一行写上:
以上命令已经将模型所有设定声明结束,接下来只需要告诉dynare需要求解的方法和展示结果的方式即可,该命令为stoch_simul,该命令有很多参数,不做深入讨论,详见dynare手册关于该命令的参数解释。这里使用的命令为使用一阶近似,画出20期的脉冲响应图。
我们将所有命令保存为”.mod”文件后,在matlab命令行界面转入保存.mod文件的文件夹,输入dynare 文件名即可使用dynare获得求解结果,如这里保存为 test.mod,matlab界面输入
(四)Dynare输出结果
在matlab结果界面,首先有steady state的每个变量数值
接下来时模型总结,即每种变量的个数,以及冲击变量的相关关系矩阵。dynare将内生变量分为state variable,jumper和static variable,dynare分类方法和正常分类不同,其完全按照变量在程序中的时间角标进行区分。变量以t-1时间出现则为state,变量以t+1出现则为jumper,变量只在t时间出现则为static,所以在dynare一个变量可以既是state又是jumper。三种变量加起来数量可能大于总变量数。如下图2+2+5>8
再往下时政策方程,constant一行表示每个变量的steady state数值,其余两行则反应每个变量与state variable的关系,即policy function
另外,dynare会求解每个内生变量的均值方差自相关系数如下,以及他们之间的相关性矩阵
同时,dynare会绘制出每个变量的脉冲响应图如下:
上海华萌教育发展基金会是由复旦大学华民教授倡议,并与他的学生们共同发起成立的一个以“资助学子、深造成才、报效中华、经世济民、回馈社会”为宗旨的非公募的公益性基金会。基金会主要提供海外深造奖学金来奖励和支持优秀大学生,赴海外大学深造攻读经济类专业博士学位,为国家培养经济学研究的明日之才。
华民教授现为复旦大学世界经济研究所教授、博士生导师。兼任国家发改委“十三五”规划委员会专家委员、国家商务部经贸政策咨询委员会专家、国家工商总局市场监督专家委员会专家、国家教育部社会科学委员会委员、中国美国经济学会副会长、上海市民营企业研究会副会长等职,长期从事国际经济和世界经济的研究和教学工作。