第十四章  計量模型之建立與求解

<回「入門講義」>

 本章介紹 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 指令執行。

 

 <回頁首>

<回「入門講義」>