CGE分析でGAMSを利用する理由

経済学でのシミュレーションにはMatlabを利用する人が多いと思います。マクロ経済学だとか産業連関分析だとか。一方、CGE分析ではGAMS(general algebraic modeling system)を利用している人が多いです。CGE分析をおこなうのにもMatlabを使えないことはないですが、ただあまり便利ではないと思います(Matlab使ったことはないですけど)。

Matlabの特徴の一つは行列表現を利用できることだと思います。つまり、ある行列をA、ベクトルをxとしたとき、「A*x」というような表現で計算ができるということです。一方、GAMSは行列表現はできません。しかし、CGE分析ではそもそもモデルを表現する際に行列表現はほとんど(全く?)使いません。理由は簡単でCGE分析で利用するモデルは非線形のモデルだからです(線形近似して解くということもほとんどないです。直接非線形のまま解きます)。

さらに、データにしても行列の形のデータはあまり使いません。使うのは多次元のベクトルの形のデータ(プログラミング用語で言う配列データ)です。例えば、CGE分析でよく利用されるGTAPデータには次のような3次元ベクトルデータが含まれています。

vxmd(i,r,s)

iは財を表すインデックスで、rとsはどちらも地域を表すインデックスです。vxmd(i,r,s)は地域rから地域sへの財iの輸出額を表すデータです。基本的に2次元までのデータしか使わないなら、行列の形でデータを扱えるのも便利かもしれませんが、3次元以上のベクトルデータもよく使うので行列表現ができることはあまりメリットにならないと思います。

それに、CGE分析をする人は計算のアルゴリズムにはそれほど関心を持たないということもMatlabを使わない理由の一つだと思います。CGEモデルは基本的には連立方程式ですので、「CGEモデルを解く=連立方程式を解く」ということになります。解くためのアルゴリズムを自分で実装したい(ソフトウェアでは実装されていないアルゴリズムを利用したい)というのなら、Matlabでプログラミングするというのもいいかもしれませんが、普通はソフトウェアに実装されている連立方程式を解くコマンドで十分です。それにGAMS(のソルバー)の計算のアルゴリズムはそれなりに優秀なので、そもそも数値計算の素人が自分でもっとよいアルゴリズムを簡単に実装できるというようなことはないと思います。

[注] 昔のCGE分析の本(例えば、Shoven and Whalleyなどの本)を見ると、Scarfアルゴリズムがどうとかという話が長々と説明されていることが多いですが、現在CGE分析をする人のほとんどは市販のソフトウェアを利用して解いているので、ああいうアルゴリズムは使いません。

あとは、CGE分析している人の多くがGAMSを使うので、GAMSを利用したほうが参考にできるものが多いという理由も大きいと思います。これが一番の理由かもしれません。