第十四章  计量模型之建立与求解

<回「入门讲义」>

 本章介绍 AREMOS/Windows  计量模型之做法,已一简单实例,按下列小节依序说明:

  • 基本概念。

  • 模型建立。

  • 样本外预测。

  • 外生变数仿真。

  • 加入 Addfactors。

  • 产生 Implicit Addfactors。

  • Large Model 解法。

  • 结果陈示。

  • 指令摘要。

 

14.1  基本概念

AREMOS/Windows 建立模型,从单一方程式到包罗上百条以上行为方程式的复杂联立模型均可处理。

AREMOS/Windows 求解联立模型时,会自动进行下列过程:

 .利用 Tarjan ordering algorithm 法,排列方程式。
         .利用 Gauss—Seidel 法求解模型。
         .产生模型解之数列。

值得注意的是,因求解过程采用 Gauss—Seidel 法,模型内生变量 (endogeous variable) 应置于方程式等号左边,而且同一变量不能在其他方程序左边重复出现。

AREMOS/Windows 对联立模型求解,分为「标准模型」(standard) 与「大模型」(large model) 两种方式。大模型顾名思义应为方程式多、数据量大且复杂程度高之联立模型,但如何划分并无严格标准。二者求解过程略有差异,为对实际作业影响不大。

本章先介绍标准模型之解法,至于大模型解法,留待 14.7 节说明。

AREMOS/Windows 的求解指令只要为 model 及 solve 两个,此二指令均有许多设定条件 (options) 可供选择,可用 query 指令查看或 set 指令改变,在本章第 14.9 节说明。

为便于说明,以下设定简单模型,由四条方程式组成,其中行为方程式三条,定义式及恒等式一条。方程式设定如下: 

cp96=f1(gdp96,cp96)

  ifix96=f2((cp96+cg96+ifix96+invch96),ex96)

  m96=f3 (gdp96,m96-1 )

  gdp96=cp96+cg96+ifix96+invch96+ex96-m96

列方程式中,其变数皆取实质(基期调整后),cp96=民间消费,cg96=政府投资,ifix96=固定资本形成,invch96=存货增加,ex96=商品及劳务输出,m96=商品及劳务输入,gdp96=国内生产毛额,cp96-1、m96-1 为前期变数。显而易见,本模型之内生变量为 cp96、ifix96、m96、及 gdp96,而外生变数为 cg96、invch96及ex96。

 <回页首>

 

14.2  模型建立

14.2.1  估计方程式

建立模型的第一步工作为估计方程式。指令如下:

(1)  键入指令 open<primary>rocmd ; 新开启模型库

(2)  键入指令 clear rocmd;     清除模型库内对象

(3)  键入指令 set freq a;              数据频率

(4)  键入指令 set per 1970 2004;        资料期间

(5)  键入指令 open e:\waremos\niaa;

(6)  键入指令 equ<autofit no>cp96log(cp96)=log(gdp96),log(cp96.1);

(7)  键入指令 normalize cp96=exp(??);

(8)  键入指令 fit;

(9)  键入指令 equ<auto no>ifix96log(ifix96)=log(cp96+cg96+ifix96+invch96),log(ex96);

(10)键入指令 normalize ifix96=exp(??);

(11)键入指令 fit;

(12)键入指令 equ<autofit no>m96log(m96)=log(gdp96),log(m96.1);

(13)键入指令 normalize m96=exp(??);

(14)键入指令 fit;

(15)键入指令 equ<autofit no constant no>gdp96=cp96+cg96+ifix96+invch96+ex96-m96;

 第一条至第三条的估计结果如下:

 

 

 

 

 <回页首>

 

14.2.2  编译及求解

其次为编译 (compile) 及求解。指令如下:

(1) 键入指令 set compile order yes;

(2) 键入指令 model rocmdl=cp 96,ifix96,m96,gdp96;

(3) 键入指令 set solve solution sol1;

(4) 键入指令 set per 1970 2004;

(5) 键入指令 solve;

 上列指令中,set compile order 为开启 Tarjan Ordering Algorithm 排序方式 (YES 可省略)。Model 指令后为对本模型命名,接着等号之后为所有方程式名称;如 <primary> 数据库中,除了本模型用到的方程式外,无其他方程序,亦可简写为’’model rocmdl=*.*’’。set solve solution 为占位符,使所得之解以”变数 .soll”名字陈现。上列指令之过程如下:

 

如要查看求解结果,可用 print 指令叫出来。如:

(1) 键入指令 print<1995 2004>gdp96,gdp96.sol1(gdp96.sol1-gdp96)/gdp96*100;

(2) 键入指令 print<1995 2004>cp96,cp96.sol1,(cp96.sol1-cp96)/cp96*100;

结果如下:

 

 

 <回页首>

 

14.3  样本外预测

预测是假设样本期间外之外生变量,将其值代入模型,已求解内生变数之值。AREMOS 对样本外预测,作法与前小节几乎相同。只要外生变量数据时间够长,即可求得相同期间内生变量解。

如继续前小节模型,对 2004 至 2006 年做预测,首先输入该段时间外生变量:政府消费 (cg96)、输出 (ex96) 及存货增加 (invch 96) 之值;其次改变 solution 的 versionname 为 sol2;最后为求解。求得之预测值会以”变量 .sol2”名字出现。指令如下:

 (1) 把光盘的「niaa.bnk」copy 到 c:\warem32 子目录,且把「只读」取消,然后在 AREMOS 主画面下 open niaa;

(2) 键入指令 set per 2004 2006;

(3) 键入指令 series<2004 2006>niaa:cg96=867707,871747,876106;

(4) 键入指令 series<2004 2006>niaa:ex96=2975113,3134629,3291360;

(5) 键入指令 series<2004 2006>niaa:invch96=37020,42734,47882;

(6) 键入指令 set solve solution sol2;

(7) 键入指令 solve<2004 2006>;

(8) 键入指令 print<2000 2006>gdp96,gdp96.sol1,gdp96.sol2;

(9) 键入指令 print<2000 2006>cp96,cp96.sol1,cp96.sol2;  

详细过程如下:

  <回页首>

   

14.4  外生变数仿真

外生变数仿真是在解答所谓”What If’’问题。亦即及外生变量设定不同水平值下,内生变量产生多大变化。继续前例,如以预测期间的政府消费 (cg96) 增加 10% 进行仿真,指令如下:

(1)    键入指令 set solve solution sol3;

(2)    键入指令 change<times>cg96=1.10 repeat *;

(3)  键入指令 solve;

(4)  键入指令 print<2000 2006>gdp96,gdp96.sol2,gdp96.sol3;

(5)  键入指令 print<2000 2006>cp96,cp96.sol2,cp96.sol3;

 详细过程如下:

 

上述指令中,首先改变 solution 的 versionname。其次用 change 指令改变外生数值,使变量 cg96 的数值乘上 1.10(即增加 10%),然后进行求解。所得之新预测值以”变量 .sol3’’名字呈现。

Change 指令有许多设定条件 (options) 可供选择,除 times 外,还有 replace、increase、decrease、%base、%change等,内设为 replace,读者可参阅使用手册说明。  

 

 <回页首>

 

14.5  加入 Addfactors

预测时加入常数项调整 (Constant Adjustment),AREMOS 称为 Addfactor 。Addfactor 是针对行为方程式之被解释变数进行调整,亦即先外加(或减)某被解释变量一个数值,透过联立求解,使该被解释变量之预测值趋近目标值,并达到同时影响其他变量预测值的目的。

在运用 Addfactor 前,须对 solve 指令中 options 作设定,包括三项:

 (1) 键入指令 set solve adjust yes;

(2) 键入指令 set solve solution soladd;

(3) 键入指令 set solve addfactor add;

 第一项为开启做 Addfactor 状态 (yes可省略);第二项为占位符,使求解之值以”变数 .soladd’’名字陈现;第三项为产生’’被解释变量 .add’’之名字,以输入 Addfactor 之值。

以下指令针对模型中民间消费 (cg96) 变量,在预测时间加入 Addfactor:

(1) 键入指令 set per 2004 2006;

(2) 键入指令 set solve adjust solution soladd addfactor add;

(3) 键入指令 series cp96.add=72500,68000,64000;

(4) 键入指令 solve;

(5) 键入指令 print<2000 2006>cp96,cp96.sol2,cp96.soladd;

(6) 键入指令 print<2000 2006>gdp96,gdp96.sol2,gdp96.soladd;

详细过程如下:

 

 <回页首>

 

14.6  产生 Implicit Addfactors

在样本期间内,AREMOS 具有计算隐含 (Implicit) Addfactors 之功能。意即在使样本其得到之解与实际值相同情况下,对应求得 Addfactors 值。这种反向过程,AREMOS 称为 Residual Feedback。

其步骤为:

(1) 键入指令 set solve feedback yes;

(2) 键入指令 set solve solution...;

(3) 键入指令 set solve addfactor;

(4) 键入指令 exclude 行为方程式(意即被解释变量);

(5) 键入指令 solve;

(6) 键入指令 set solve feedback no;

(7) 键入指令 include行为方程式(意即解释变量);

(8) 键入指令 set solve solution…;

(9) 键入指令 重新solve;

 前五步骤产生隐含 Addfactors ; 后四步骤为将隐含 Addfactors 代回模型,重新求解,以显示该隐含 Addfactors 却能使样本期得到之解与实际值一样。此处隐含 Addfactors 代回过程,亦可参采上小节纳入 Addfactors 之作法,结果完全一样。

以下接续上小节指令,以求取行为方程式 cp96、infix96、m96 之隐含 Addfactors,指令如下:

 (1) 键入指令 del cp96.add;

(2) 键入指令 set per 1995 2004;

(3) 键入指令 set solve feedback solution soladd1 addfactor add;

(4) 键入指令 exclude cp96,ifix96,m96;

(5) 键入指令 solve;

(6) 键入指令 set solve feedback no;

(7) 键入指令 include cp96,ifix96,m96;

(8) 键入指令 set solve solution soladd2;

(9) 键入指令 solve;

(10)键入指令 print cp96,cp96.soladd2,cp96.add;

(11)键入指令 print<1995 2004>m96,m96.soladd2,m96.add;

(12)键入指令 print<1995 2004>gdp96,gdp96.soladd2;

 

 <回页首>  

 

14.7  Large Model 解法

14.7.1  样本外预测

前面几节介绍的属标准模型,以下则介绍大模型解法。二者不同地方,是求解大模型时,数据从 SIM file 读取,而不从 AREMOS 数据读取。故指令与标准解法略有差异,惟对实际作业其实影响不大。仍延续用本章模型,指令如下:

(1) 键入指令 set per 1995 2006;

(2) 键入指令 set compile order;

(3) 键入指令 q compile;

(4) 键入指令 model<autocompile>Rocmdl=cp96,ifix96,m96,gdp96;

(5) 键入指令 datafile<replace>rocmdl=#rocmdl.endogenous,#rocmdl.exogenous;

(6) 键入指令 set solve solution rocmdl;

(7) 键入指令 load * using niaa:*.a into rocmdl;

(8) 键入指令 solve<2004 2006>;

(9) 键入指令 unload * as *.sol4 from rocmdl;

上列指令中,可以 q compile 查看看。其次为编译模型,用到 model 这个指令。Datafile 指令为创造一个数据文件 (rocmdl.sim),以便在求解过程中存入内生变量与外生变量之值。 solve之solution 须设定与 model 指令后之名称 (rocmdl) 相同。 load 指令将数据放入 datafile 所创造之数据文件 (rocmdl.sim) 中。求解完成后,再将所解之值从数据文件 (rocmdl.sim) 中 unload 下来,并以”变数 .sol4”名字陈现。

详细过程如下:

任意打印几个变量,可以看到大模型求解结果(变量 .sol4) 与第 14.3 节标准模型

求解结果(变量 .sol2) 完全相同,如下所示:

(1) 键入指令 print<2004 2006>gdp96.sol2,gdp96.sol4;

(2) 键入指令 print<2004 2006>m96.sol2,m96.sol4;

(3) 键入指令 print<2004 2006>ifix96.sol2,ifix96.sol4;

 另外值得一提的是,model 指令在完成编译模型后,AREMOS 会产生五个 list,显示本模型相关变量关系,可以display 出来,如下所示:

(1) 键入指令 display list rocmdl.endogenous;

(2) 键入指令 display list rocmdl.exogenous;

(3) 键入指令 display list rocmdl.identity;

(4) 键入指令 display list rocmdl.stochastic;

(5) 键入指令 display list rocmdl.strong;

 

 <回页首>

 

14.7.2  外生变数仿真

至于大模型做外生变量仿真,指令如下(与本章第 14.1 节比较):

(1) 键入指令 set per 2004 2006;

(2) 键入指令 change<times>cg96=1.10 repeat *;

(3) 键入指令 load cg96 using rocmdl:*.rocmdl into rocmdl;

(4) 键入指令 load #rocmdl.endogenous using niaa:*.a into rocmdl;

(5) 键入指令 solve<2004 2006>;

(6) 键入指令 unload * as *.sol5 from rocmdl;

 上列指令中,比较特殊为两个 load 指令。因 change 指令使变量 cg96 乘上 1.10 (即增加 10%),其乘积会存在一个新创的变量 (cg96.rocmdl) 中,而前面一个 load 指令即是将 cg96.rocmdl 数列放进 rocmdl.sim 之资料文件 (datafile指令所创造);后面一个 load 指令为将内生变量再放进 rocmdl.sim 之资料文件;求解完成后,从数据文件 (rocmdl.sim) 中 unload 下来,并以’’变数 sol5”名字陈现。

其完整过程如下:

任意打印几个变数,与 14.4 节之结果(变量 .sol3)比较,如下所示(由于求解 iteration 之起始值不同,尾数略有差异):

(1) 键入指令 print<2004 2005>gdp96.sol3,gdp96.sol5;

(2) 键入指令 print<2004 2005>m96.sol3,m96.sol5;

(3) 键入指令 print<2004 2005>ifix96.sol3,ifix96.sol5;

 

 <回页首>

 

14.7.3  加入 Addfactors

大模型做样本外预测,亦可加入 Addfactors,指令如下(与本章第 14.5 节比较):

(1) 键入指令 set per 2000 2006;

(2) 键入指令 compile;

(3) 键入指令 datafile<replace>rocmdl=#rocmdl.endogenous,#rocmdl.exogenous;

(4) 键入指令 load * using niaa:*.a into rocmdl;

(5) 键入指令 series<2004 2006>cp.add=72500,68000,64000;

(6) 键入指令 datafile<replace>rocmdl.a=cp96;

(7) 键入指令 load * using rocmdl:*.add into rocmdla;

(8) 键入指令 set solve adjust solution rocmdl addfactor rocmdla;

(9) 键入指令 solve<2004 2006>;

(10)键入指令 unload * as *.so14a from rocmdl;

 上列指令说明如下:

(1)设定数据期间。虽然预测时间始于 2004 年,但模型使用落后一期变量,故数据时间至少需提前一年。

(2) compile<large> 模型。

(3)用 datafile 指令创造一个数据文件 (rocmdl.sim),以便放入数据。

(4)用 load 指令将数据从数据库 (niaa) 转入 datafile 所创造之资料文件 (rocmdl.sim) 中。

(5)输入 addfactor 值。内生变数之 version 须为 add。如有两个以上变数须加入 addfactor,依序以 series 输入。

(6)用 datafile 指令创造另一个数据文件 (rocmdl.sim),以便放入 addfactor 值。在此资料文件 (rocmdl.sim) 等号右边为 addfactor 变数,不须含 version(.add),如有两个以上变数,以逗号隔开。

(7)用 load 指令将 addfactor 值转入数据文件 (rocmdl.sim) 中。

(8)开启 solve 指令中的 adjust 为 yes;并设定 solution 为数据文件 rocmdl 及 addfactor 为资料文件 rocmdla。

(9)设定预测期间,并进行求解。

(10)求解完成后,将预测值从数据文件 (rocmdl.sim) 中 unload 下来,并以’’变数 .sol4a”名字陈现。

 其完整过程如下:

<插图>资料文件 (rocmdl.sim)

任意打印几个变数,与 14.5节 之结果(变量 .soladd)比较,如下所示(由于求解 iteration 之起始值不同,尾数略有差异):

(1)键入指令 print<2004 2006>cp96.soladd,cp96.sol4a;

(2)键入指令 print<2004 2006> ifix96.soladd,ifix96.sol4a;

(3)键入指令 print<2004 2006> gdp96.soladd,gdp96.sol4a;

 <回页首>

 

14.8  结果陈示

本章前面几节陈列求解结果,用到 print 指令。另外,亦可用 m_compare 指令比较求解与实际值之差异,用法如下: 

 m_compare 实际值 version 求解值 version 由 list 构成之层串变数

例如第 14.2.2 节求解结果,用 m_compare 指令作法如下:

(1) 键入指令 set per 1970 2004;

(2) 键入指令 m_compare a sol1 #rocmdl.endogenous;

并得到下列结果:

 

此外,模型求解之结果,如能迅速陈现在眼前,必可大幅提高模型作业效率。AREMOS Modeling 与 Graphic 及 Table 连结使用,恰可发挥”一贯作业”的功能(有关图、表制作,读者可参阅该章说明,此处不再赘述)。以下仅以 AREMOS Table 陈列第 14.3 或第 14.7 节样本外预测结果,以及用 AREMOS Graphic 陈示第 14.2.2 节求解结果。

 

 <回页首>

 

14.9  指令摘要

14.9.1  check

建立一个计量经济模型,当涉及众多的变量及大量数据。除模型之良窳外,数据正确与否,亦攸关求解过程与结果。为避免转录数据疏忽,在求解前先对数据作查证,乃重要步骤。以下指令可针对模型中定义式及恒等式等号两边变量数据进行勾稽核对,如有错误,相关统计量将显示异于零。

 (1)  键入指令 open<pri>rocmdl;

(2)  键入指令 open c:\warem32\niaa;

(3)  键入指令 for x=#rocmdl.identity;

(4)  键入指令 check<1995 2004>#x;

(5)  键入指令 end;

 <回页首>

 

14.9.2  solve

solve 指令有许多 options 可供选择,可以 query 指令查阅,如下所示:

键入指令 q  solve;

 其中值得注意为:

 TYPE     求解方式。分为动态 (Dynamic)、预测 (Forecast) 及静态 (Static) 等三种求解方式可供选择。内设值为动态求解。

 METHOD  SEIDEL。求解为 Gauss-Seidel 法。

 LIMIT    每期求解最大 iteration 次数。内设值为 25 次,不过可以放大。

 FLOOR   每期求解达到收敛最小 iteration 次数。内设值为 2 次。

 COTINUE 当预测不收敛时,是否继续求解下一期。内设值为 NO。

 ADJUST   如为 Yes,开启 Addfactor (参见第 14.5 节)。内设值为 NO。

 FEEDBACK如为 Yes,开启隐含 Addfactor (参见第 14.6 节)。内设值为 NO。

 SOLUTION 求解内生变数之 version。内设值 SOL。

 INTERNAL 当数据不足时如何处置。可选择 Impose、Inform 或 Normal。内设值为 Normal。

 EXOSAVE 如为 Yes,外生变量亦同时冠上 SOLUTION 之 version。

 ADDFACTORS  ADJUST 开启后,加入 Addfactor 内生变数之 version (参见第 14.5 节。内设值为 ADD。)

 BASELINE 起始值 (starting value) 之 version。当输入特定 version,及拥有该 version 之变数数值为求解之起始值。否则以目前 Frequency 之变数数值为起始值。

 <回页首>

14.9.3  model

model指令是用来宣告模型所包含的所有方程式,并做自动编译 (Autocompile)。以 query 指令查阅 mode l的 option :

q model;

 AUTOCOMPILE  如为 yes,执行 model 后会自动编译,并产生五个 list,每个 list 包含特定变量。这五个 list 为:

. modelname .ENDOGENOUS

. modelname .EXOGENOUS

. modelname .IDENTITY

. modelname .STOCHASTIC

. modelname .STRONG

 

因模型进行求解前,一定都须经过编译 (Compile),因此,如 model autocompile 不设为 yes,于执行 model 指令后,须再用 compile 指令以编译模型。

本章以上所介绍的指令均可写成 cmd 文件,然后用 obey 指令执行。

 

 <回页首>

<回「入门讲义」>