GTAP全球贸易分析模型实战:TABLO数据读取与RunGTAP模拟指南
简介GTAP模型RunGTAP操作方法中文文档面向经济学研究人员、贸易政策分析者及GEMPACK软件初学者系统讲解利用RunGTAP与WinGEM进行全球贸易分析的操作路径。文档按A至E局部加附录A组织内容覆盖GTAP数据库的数据查询与报告、RunGTAP版本与数据集选择、模拟运行、数据库聚集如ACORS3X3的3x3数据集、自定义经济模型并配备多个可动手操作的案例帮助读者在Windows环境下逐步熟悉GEMPACK及TABLO程序的使用。附录A还专门给出在WinGEM下直接完成GTAP模拟的详细指导满足不同操作路径的学习需求。资源为单个doc文件共249KB内容精炼集中适合需要快速入门GTAP模型操作的学习者也适合作为短期课程配套手册。目前已有709人学习下载是一份兼顾系统性、实操性与便携性的入门参考资料。1. 从一份2005年的操作手册说起GTAP模型与RunGTAP的实际边界当你打算评估一项关税下调对国内制造业和农业的连锁反应时直接打开GTAP数据库会看到几十个系数数组和几千个地区商品组合但并不知道从哪下手。GTAP全球贸易分析模型的日常操演几乎全部依赖RunGTAP这个交互式Windows程序而RunGTAP背后是GEMPACK的TABLO编译与GEMSIM求解流程。这份为2005年GTAP短期课程设计的文档把GTAP数据文件结构、TABLO输入文件的公式逻辑、以及模拟前的Closure与Shocks设置拆成了可逐条执行的案例。对想复现已有研究结果或搭建自有可计算一般均衡模型的从业者来说这套方法至今仍是进入GTAP模型操作最直接的一条路径。2. GTAP数据三件套GTAPDATA、GTAPSETS、GTAPPARM 的读取逻辑2.1 三个文件与逻辑名称的对应关系RunGTAP里的每个GTAP版本比如ACORS3X3背后不是单个文件而是三个Header Array文件。它们的逻辑名称在TABLO输入文件中被直接引用对应关系如下逻辑名称文件内容在TABLO中的角色GTAPDATA全球数据集各地区进出口、贸易数据、投入产出数据通过READ语句读取系数GTAPSETS设置信息地区与商品的集合定义通过SET语句定义集合元素GTAPPARM参数值如替代弹性ESUBVA通过READ语句读取参数这三个文件的分工很明确。GTAPSETS告诉你模型里有哪些地区REG和商品TRAD_M、PROD_MGTAPDATA保存实际的金额数据GTAPPARM保存行为参数。RunGTAP的界面把这些文件分层暴露出来但真正理解数据必须从查看它们开始。2.2 从模型声明定位系数含义查看数据的第一步不是打开数据文件而是打开模型声明文件。在RunGTAP主菜单选择Version | Change将版本切换为ACORS3X3。然后点击View | TAB files | Main ModelRunGTAP会启动一个内置文本编辑器显示GTAP.TAB的源代码。在编辑器中按CtrlHome跳到文件开头再通过Search | Find搜索GTAPDATA你会看到这个文件的逻辑名称是在TABLO输入文件中声明的。搜索VDPA第一次出现的声明写着VDPA(i,r)表示国内商品i在地区r的私人消费支出以代理商价格计算。继续搜索第二次能看到这个系数从GTAPDATA文件里的VDPA标题读取。注意这里有个使用习惯RunGTAP内置的编辑器是模态的完成查看后必须点击Back to RunGTAP关闭它否则无法切换到其他菜单。这个细节在案例和实际使用中都很容易卡住。2.3 使用ViewHAR查看实际数据矩阵关闭编辑器后选择View | Base Data | Core DataRunGTAP会调用ViewHAR程序打开ACORS3X3版本的全球数据文件。ViewHAR的Contents页面会列出文件中的每一个HeaderHeader列是标题名Type列是数据类型Size列是维度Name列是完整描述。例如VDPA这一行是HeaderTypeSizeNameVDPARETRAD_M x REGIntermediates - Household Domestic Purchases at Agents Prices双击VDPA行就能看到3x3的实际金额矩阵。这里你会遇到三维数组的展示问题VDFM是TRAD_M x PROD_M x REG的三维数组屏幕上则通过All/Sum下拉列表选择固定某个维度。右上方三个下拉列表分别控制TRAD_M、PROD_M和REG的选取。将REG切换为SSA就能单独查看撒哈拉以南非洲地区的企业采购数据。这样的结构决定了你读数据时要先回答一个问题要观察的是总量还是某个地区/商品的细分。默认显示的是所有地区汇总这容易让你误以为VDFM只是一张3x4矩阵忘了后面还有区域维度。养成打开三维数组时先看右上角三个下拉列表的状态再下结论的习惯能省掉大量返工。3. 用GTAPView宏变量把原始数据变成可分析结果3.1 从VDFM到行业中间投入矩阵继续沿用上一章的ViewHAR窗口。查看VDFM行时屏幕显示的是TRAD_M行、PROD_M列加上CGDS列的矩阵。CGDS是资本品部门也出现在PROD_M集合里所以列数比行数多一列。把右上角的TRAD_M下拉列表从All TRAD_M切换到Sum TRAD_M再让REG保持All REG此时food行和ROW列交叉的数值表示世界其他地区ROW所有贸易商品对食品部门中间投入的市场价格汇总。这种汇总方式适合回答某一地区某部门的中间投入总价值这类问题。但要注意VDFM只是国内商品的采购。进口商品在另一个系数VIFM中如果不把两者加总就得不到完整的中间投入矩阵。GTAPView输出文件就是在做这类加总。3.2 使用份额列表框进行相对值分析ViewHAR窗口左上角有两个下拉列表第一个是份额列表框默认显示None。把它切到Row矩阵中的数字会变为行和比例每行合计为1切到Col则变为列比例切到Matrix则显示每个元素占整个矩阵的比例。第二个下拉列表控制小数点后位数用于快速调整显示精度。例如查看VDPA数据时把份额列表框设为Row就能看到各个地区私人消费中国内商品的结构占比这比直接看绝对值更容易发现区域差异。切换到Matrix则能看出某一个具体单元格对整个消费矩阵的影响。这个功能在做数据探勘时非常有用尤其是当你面对一个不熟悉的GTAP版本时先看比例结构再回看绝对值能少走很多弯路。3.3 GTAPView输出GDPEXP、GDPSRC与CURRENTACCT当你需要知道每个地区的GDP支出构成、收入构成和经常账户余额时直接翻数据库很难找。RunGTAP提供了View | Base Data | GTAPView Output其背后的GTPVEW.TAB文件计算了四组指标宏变量、贸易运输和保护、商品、行业。打开GTAPView输出后AG01标题对应GDPEXPAG05对应CURRENTACCT。双击AG01可以看到GDPEXP(r,cons)等值。GDPEXP中cons的数值来自公式GDPEXP(r,cons) PRIVEXP(r) ...实际在GTPVEW.TAB源码里能看到更精确的拆解比如PRIVEXP又由哪些系数计算而来。GDPEXP按支出法统计GDPGDPSRC按收入法统计两者在给定GTAP数据库内理论上应保持一致。用这个特性可以验证你的数据库是否完整。CURRENTACCT的计算涉及到VXWD和VIWS的汇总。在GTPVEW.TAB中有类似下面的公式FORMULA (all,r,REG)(all,m,MARG_M) CURRENTACCT(r,exp,m) sum(s,REG, VXWD(m,r,s)) VST(m,r);这行公式说明一个地区出口对经常账户的贡献等于对所有进口国出口额求和再加上运输服务收入。查看AG05时把所有CURACCT切到exp、TRAD_M切到All TRAD_M就能得到该地区总出口对经常账户的贡献值。你可以做一个快速验证在ACORS3X3版本中查看SSA地区GDPEXP和GDPSRC。如果两个数值差异显著问题通常出在GTAPDATA文件选错或版本不匹配而不是模型公式逻辑错误。4. 编写TABLO输入文件从GTAP数据库计算自定义指标4.1 为什么需要自己写TABLOGTAPView输出的指标虽然常用但并不是覆盖所有计算需求。比如你想计算每个地区私人消费占国内总销售的比例虽然可以间接从GDP构成中推导但当数据库维度改变时用现成输出文件可能没有直接给出。这时需要编写自己的TABLO输入文件。TABLO是GEMPACK的建模语言它的工作方式分为两步先用TABLO编译TAB文件生成计算机可读的辅助文件通常是.SIM再用GEMSIM执行辅助文件从GTAPDATA等基础文件读取数据按公式计算并把结果写入新文件。RunGTAP内部的许多功能本质上就是替你把这两步预执行了一遍。4.2 补全GVIEWX.TAB从数据读取到自定义公式文档给出了一个不完整版本GVIEWX.TAB。我在复现时补全了缺失的FORMULA和WRITE语句。下面是关键部分FILE GTAPSETS # File with set specification #; SET REG # Regions in the model # MAXIMUM SIZE 10 READ ELEMENTS FROM FILE gtapsets HEADER H1; SET TRAD_M # TRADED COMMODITIES # MAXIMUM SIZE 10 READ ELEMENTS FROM FILE gtapsets HEADER H2; SET PROD_M # PRODUCED COMMODITIES # MAXIMUM SIZE 11 READ ELEMENTS FROM FILE gtapsets HEADER H5; SUBSET TRAD_M IS SUBSET OF PROD_M; FILE GTAPDATA # The file containing all base data. #; FILE GVIEWX # New header file for results #; COEFFICIENT (all,i,TRAD_M)(all,j,PROD_M)(all,r,REG) VDFM(i,j,r); COEFFICIENT (all,i,TRAD_M)(all,r,REG) VDPM(i,r); COEFFICIENT (all,i,TRAD_M)(all,r,REG) VDGM(i,r); READ (all,i,TRAD_M)(all,j,PROD_M)(all,r,REG) VDFM(i,j,r) FROM FILE GTAPDATA HEADER VDFM; READ (all,i,TRAD_M)(all,r,REG) VDPM(i,r) FROM FILE GTAPDATA HEADER VDPM; READ (all,i,TRAD_M)(all,r,REG) VDGM(i,r) FROM FILE GTAPDATA HEADER VDGM; COEFFICIENT (all,i,TRAD_M)(all,r,REG) VDM(i,r); FORMULA (all,i,TRAD_M)(all,r,REG) VDM(i,r) VDPM(i,r) VDGM(i,r) sum(j,PROD_M, VDFM(i,j,r)); COEFFICIENT (all,i,TRAD_M)(all,r,REG) SHRDPM(i,r); FORMULA (all,i,TRAD_M)(all,r,REG) SHRDPM(i,r) VDPM(i,r) / VDM(i,r); WRITE (all,i,TRAD_M)(all,r,REG) VDM(i,r) TO FILE GVIEWX HEADER VDM; WRITE (all,i,TRAD_M)(all,r,REG) SHRDPM(i,r) TO FILE GVIEWX HEADER SHR;这段代码定义了两个结果系数。VDM是每种贸易商品在每个地区按市场价格计算的国内总销售等于私人消费、政府消费和所有生产部门中间投入的总和。SHRDPM是私人消费占国内总销售的比例用于反映国内消费结构。这里有一个容易出错的细节如果某个地区完全没有国内销售SHRDPM会出现除零GEMSIM在运行时会报告除以零错误。我一般会在正式运行前用ViewHAR检查VDM是否全为正或者先运行不含比例计算的一版再用外部工具计算比例避免在TABLO里处理除零分支。如果你在DOS框里运行过GEMPACK程序会发现TABLO的日志输出会提示每个阶段读取的Header名称。例如读取VDFM时日志会打印Reading VDFM from GTAPDATA。这些提示在排查Header名称拼写错误时非常有用。4.3 运行TABLO与GEMSIM的流程在WinGEM环境中设置工作目录是第一步。选择File | Change both default directories把当前目录切换到C:\GTAP。这一目录下必须包含GTAPDATA、GTAPSETS等文件以及你的GVIEWX.TAB。接下来运行TABLO编译GVIEWX.TAB。在WinGEM中通过文件菜单或命令窗口执行TABLO GVIEWX.TABTABLO会检查语法并生成GVIEWX.SIM辅助文件。然后运行GEMSIMGEMSIM GVIEWXGEMSIM执行时会读取GVIEWX.SIM并根据TABLO文件中的FILE声明自动查找GTAPDATA、GTAPSETS等文件。如果没有指定数据文件GEMSIM会弹出文件选择窗口。最后的输出是包含VDM和SHR两个Header的GVIEWX头文件。可以用ViewHAR打开它核对计算结果。如果你没有GEMPACK许可证这一步无法完成。但它不影响你理解公式本身。即使是通读代码你也能知道GTAP的TABLO语法如何组织READ、FORMULA和WRITE。GVIEWX.TAB中有几个细节值得注意第一SET的MAXIMUM SIZE必须不小于实际集合大小否则编译报错第二READ语句的HEADER名字必须与GTAPDATA文件中的Header完全一致区分大小写第三WRITE语句的目标文件GVIEWX如果是新建的GEMPACK会自动创建如果已存在会提示是否覆盖。这些细节在你从示例转向自己的模型时能节省大量时间。5. RunGTAP模拟流程Closure、Shocks与结果的边界5.1 六个页签的功能划分RunGTAP主界面使用页签组织功能。前两页Title和RunGTAP包含一般信息第三页显示当前版本、使用的GTAP数据汇总剩余四页关于模拟。模拟相关页签是Closure、Shocks、Solve、Results。我通常在进入模拟前会先看一遍第三页的数据摘要确认版本号与数据库维度避免在错误的数据集上跑冲击。页签作用使用建议Title模拟标题和注释填写便于识别的名称RunGTAP当前版本和数据信息确认版本号与集合大小Closure模型闭合变量内生/外生按模型理论选择闭合Shocks设定冲击变量与幅度用百分比形式注意单位Solve求解方法和收敛设置默认通常可解Results结果查看与导出先看福利分解和贸易量变化5.2 一次典型模拟的参数设置以标准GTAP模型为例模拟前需要先确认Closure。GTAP标准闭合中资本存量、劳动力、土地等禀赋通常是外生的商品价格、贸易量是内生的。若要模拟关税削减在Shocks页选择进口关税变量输入-10表示降低10个百分点然后点击Solve。这里要注意单位GTAP中冲击变量的单位是百分比变化还是比例变化取决于模型设定。大多数GTAP应用采用百分比变化比如10表示10%。在设置冲击前先查看模型的TABLO文件中变量的单位说明避免把10%写成0.1。我见过不少新手在这里栽跟头结果解出来的数字完全不符合量级预期。5.3 数据聚集与自定义模型C部分的核心是如何生成一个新版数据库也就是聚集。RunGTAP允许你从完整GTAP数据库中选择需要的地区和商品重新组合成小规模版本。ACORS3X3就是3个地区、3种可贸易商品与3个生产部门的传统教学数据库。实际研究场景中常常需要将全球129个地区聚合成十几个区域这时聚集工具的作用就体现出来了。D部分则面向已经熟悉GEMPACK的用户。如果你要运行自己调整过的经济模型需要在RunGTAP中加载新的TABLO文件和对应的数据库。常见的做法是把修改后的模型编译为GEMSIM辅助文件然后在RunGTAP的Simulation设置中指向该文件。要注意RunGTAP的版本兼容性——3.10或更新的版本才能支持这份文档描述的操作流程。早期版本对Header Array文件的支持并不完整强行加载会导致读取错误。5.4 模拟结果的关键路径Results页Solve完成后Results页会列出可查看的变量。GTAP模型的输出通常包括贸易量变化、福利变化等价变差EV、贸易条件效应等。建议先查看EV这是政策评估中最常被引用的福利指标。然后查看部门产出变化确认政策冲击对不同行业的影响方向是否符合直觉。如果你要导出结果RunGTAP可以把结果文件转为文本或CSV格式。具体导出路径会因版本而异但核心是找到Results页的导出按钮选择你需要的变量和地区维度。导出的CSV可以直接用于后续的图表绘制或计量分析。6. 绕开上手期的三个坑文件内容、许可限制与数据精度验证6.1 模态编辑器导致界面卡死RunGTAP内置编辑器在打开状态会阻塞其他操作这是新用户最常见的卡顿来源。看完GTAP.TAB后必须点击Back to RunGTAP关闭编辑器而不是直接切换窗口。如果界面无响应先检查是否有编辑器窗口未关闭。许多看似崩溃的情况只是因为编辑器还停在前台。6.2 修改参数前先备份在ViewHAR中可以直接编辑参数比如将ESUBVA中food的替代弹性改成新值。保存时建议使用File | Save as Header Array File另存为special.prm不要覆盖原始文件。这样原数据库参数保持不变你的实验参数保留在独立文件中。GEMPACK在读取参数文件时有优先级约定单独保存的prm文件需要显式加载这一机制正好用来做参数敏感性分析。6.3 用GDP核对数据一致性GTAPView输出同时提供支出法和收入法的GDP。在ACORS3X3版本中查看SSA地区两个值理论上应一致。如果差异显著检查版本是否选错或者GTAPDATA文件是否被修改过。这是一个很好的数据完整性验证习惯。最后提醒一个单位问题GTAP基准年数据通常以百万美元为单位但部分辅助文件可能转换为千美元或亿美元。当你把GTAPView输出和核心数据对照时先确认单位再核对数值量级。我第一次用这份操作手册时就在这个单位换算上多花了半天。本文还有配套的精品资源点击获取