资讯动态

GTAP模型在RunGTAP中的完整操作:从数据库聚合到闭合冲击与排错

发布时间:2026/9/19 17:20:59 来源:尧图企业网站定制
简介面向经济学研究者与政策分析人员的GTAP模型RunGTAP中文操作指南系统讲解如何利用RunGTAP和WinGEM/GEMPACK工具开展全球贸易分析。全文以实践案例为主线基于ACORS3X3 3x3数据集A部分指导直接从GTAP数据库中检索所需数据并借助TABLO程序计算额外指标B部分演示如何执行模拟C部分介绍GTAP数据库的聚合操作D部分说明如何在RunGTAP中调整和运行自定义经济模型E部分推荐更多扩展资源与替代模型附录A专门给出在WinGEM下直接进行GTAP模拟的详细步骤。资源为单个DOC文档容量仅249KB便于保存查阅已有700余人学习浏览。文档源自GTAP短期课程材料讲解细致适合希望快速掌握RunGTAP操作要点的初学者及需要系统梳理GTAP数据流程的研究人员参考。1. 为什么GTAP模型要挂在RunGTAP上跑一次实验的完整链条GTAP是一个全球可计算一般均衡模型它给出的是十几万条方程而不是一个能直接双击运行的软件真正把方程变成数字结果的是GEMPACK求解器RunGTAP则是那一层让研究者不必面对命令行的图形操作台。常被忽视的是跑一次GTAP模型的最大工作量并不在模型本身而在数据准备141个区域、65个部门、5种禀赋的原始数据库要先通过聚合变成可管理的规模再在闭合Closure里决定哪些变量外生、哪些内生最后把政策变化写成冲击Shock才能按下求解。这篇文章按一次完整实验的顺序展开覆盖环境安装、数据库聚合、闭合与冲击设置、结果解读以及最高频的挂起与单步排错给刚接触GTAP的读者一条能复现的操作路径也让跑过一两次的人把参数和坑补齐。2. RunGTAP落地三步GEMPACK安装、工作目录规划与GTAP数据库文件核对2.1 先分清三件套GEMPACK、RunGTAP、GTAP数据库GTAP模型的方程写在GTAP.TAB里这门语言叫TABLO。RunGTAP只是壳真正负责把TABLO编译成可执行程序、再迭代求解的是GEMPACK套件里的TABLO与GEMSIM两个程序。安装GEMPACK时命令行程序与RunGTAP图形界面会同时装好桌面出现RunGTAP图标打开后第一件事是确认授权信息主界面的License菜单里能看到授权状态与到期时间授权缺失时点击Solve不会有任何反应日志里只留下一条license相关错误。这个问题的隐蔽性在于它看起来太像“程序卡死”很容易让人误判成一次挂起。提示GEMPACK对非ASCII路径的处理一直不算友好。工作目录和数据库目录统一用C:\gtapwork这类纯英文、无空格的路径中文用户名或中文文件夹名是「点击Solve后无反应」的高频来源遇到先查路径。数据库方面GTAP中心下载的数据包各版本打包方式略有差异早期版本通常拆成basedata.har、sets.har、paramdata.har三个文件较新版本可能合并进一个以版本号命名的HAR文件。打开RunGTAP的Main标签页它会列出当前实验需要的全部文件缺哪个直接标红不用自己去猜。2.2 工作目录里到底该放什么一张文件职责表RunGTAP的工作目录建议建两层C:\gtapwork\data放数据库原始文件C:\gtapwork\model放模型与实验文件。model目录里会有GTAP.TAB、聚合数据库、闭合文件.cls、冲击文件.shk和求解产物。用一张表说明这些文件的角色文件角色缺失或损坏时的表现basedata.har基期数据产出、双边贸易、关税与运输成本Main页文件检查报错无法进入求解sets.har区域、部门、禀赋的代码与维度FlexAgg读不出部门名聚合直接中断paramdata.har替代弹性、阿明顿参数等行为参数求解阶段报参数缺失GTAP.TABTABLO方程源码编译阶段报语法错误*.cls闭合文件求解时报内生/外生变量数目不匹配*.shk冲击文件实验没有任何政策冲击结果等于基期2.3 用一条命令核对数据库文件是否齐备数据库文件解压后用PowerShell一条命令检查文件数量和大小Get-ChildItem -Path C:\gtapwork\data -Filter *.har | Select-Object Name, Length, LastWriteTime逻辑说明这条命令把数据目录里所有HAR文件列出来Length字段可以看出文件是否完整。basedata完整解压后通常有几十到上百MB如果只有几KB说明解压过程断了重新解压比手动修复更明智。LastWriteTime能帮你确认是否误用了旧版本数据库。模型源码是纯文本需要核对闭合声明时直接把GTAP.TAB拖进编辑器搜索关键词。在WSL或Git Bash里可以这样定位闭合声明段grep -n ^Exogenous\|^swap GTAP.TAB参数说明-n输出行号^行锚点保证只匹配顶格的声明不命中方程内部的注释字眼。Windows原生环境的记事本查找也能完成同样的事差别只是没有行号对照。找到的闭合段位于文件末尾这是第4章手动改闭合时要反复回到的位置。3. 用RunGTAP集成聚合器做区域/部门归并一张映射表生成可求解数据库3.1 为什么必须聚合百万级变量不是人能驾驭的规模GTAP 10的原始数据库是141个区域、65个部门、5种禀赋加上141×141的双边贸易矩阵完整规模下内生变量数以百万计GEMSIM虽然能解但单次求解时间以小时计结果文件动辄几十GB后处理根本展开不开。学术论文里常见的做法是先聚合到十几个区域、十几个部门把变量压到万级以下单次求解回到秒级结果文件也小到能在表格软件里直接处理。聚合的代价是丢掉部门与区域细节所以聚合方案要用研究问题倒推研究关税削减就别把农产品细节压光研究劳动力市场就把禀赋维度完整保留。3.2 在RunGTAP里启动FlexAgg并写出可复用的映射表聚合程序是GEMPACK自带的FlexAggRunGTAP把入口放在工具栏的Aggregation按钮。启动后先指定数据目录FlexAgg会读入sets.har并列出全部区域与部门代码之后在映射文本框里给每个聚合后的区域、部门分配原代码常见写法是「聚合名称加冒号加代码列表」逗号分隔。以「中国、美国、欧盟27、世界其它」加10个部门的方案为例区域映射写成R 中国 : CHN R 美国 : USA R 欧盟27 : AUT,BEL,BGR,HRV,CYP,CZE,DNK,EST,FIN,FRA,DEU,GRC,HUN,IRL,ITA,LVA,LTU,LUX,MLT,NLD,POL,PRT,ROU,SVK,SVN,ESP,SWE R 世界其它: 其余代码全部列出或使用聚合器的“剩余并入”选项参数说明R开头表示区域映射部门映射用S开头区域代码是大写三字母CHN部门代码是小写三字母pdr表示稻米大小写不能混。写错一个字母FlexAgg会直接报set element not found。世界其它区域不要用猜的代码要么显式把剩余国家全列上要么用聚合器提供的剩余并入选项漏掉一个区域会导致全球合计对不上。部门映射同理下面是可直接抄的示意方案覆盖全部65个部门S 粮食作物 : pdr,wht,gro S 其它种植 : v_f,osd,c_b,pfb,ocr S 畜牧与肉 : ctl,oap,rmk,wol,cmt,omt S 能源矿产 : coa,oil,gas,oxt,omn S 轻工制造 : tex,wap,lea,lum,ppp S 重化工业 : p_c,crp,nmm,i_s,nfm,fmp,mvh,otn,ome,ele S 公用事业 : ely,gdt,wtr,cns S 贸易运输 : trd,otp,wtp,atp,cmn,off S 金融商业 : isr,obs S 其它服务 : ros,dwe,osg这是一份可以直接落地的起步映射关键点是每个GTAP原部门代码只出现一次确保没有部门被漏掉。FlexAgg有一个常见默认行为按基期贸易额加权聚合。这个权重合不合理取决于研究设计如果后续要做福利分解权重改动必须记录在实验档案里否则结果没法复现。3.3 聚合结果的三个检查点聚合完成后工作目录会多出一个新的HAR文件通常以你起的名字命名比如agg10x4.har。建议做三件事再往下走。第一用ViewHAR打开确认Trades表维度是10×4×4即部门×来源×目的维度对得上说明部门与区域都没漏。第二看数据汇总里的全球总进口与总出口是否基本相等贸易不平衡说明映射里漏了区域或部门。第三把.agg映射文件复制一份带进实验目录它就是聚合步骤的复现凭证下次改实验直接加载这份文件不需要重新手敲几十行代码。4. 在RunGTAP里设置闭合与冲击标准闭合下的关税削减和劳动力实验4.1 闭合的本质方程数与外生变量数的配平游戏GEMPACK求解前会检查内生变量数是否等于方程数。GTAP的方程数是固定的把哪些变量放进外生集合决定了模型「怎么动」这组划分就是闭合Closure。闭合写不对时GEMPACK的报错不会指出你的逻辑问题只会说外生变量多了或少了因此动手改闭合前先在Closure页面把当前配置存成.cls基线文件每次只改一处改完先编译检查数量配平再谈结果。4.2 标准闭合里本来就外生的变量直接冲击清单标准GTAP闭合里以下变量默认在外生集合意味着不需要改闭合就能在冲击文件里直接给它们赋值变量含义典型实验qo(禀赋,区域)禀赋供给量劳动力增长、资本积累、耕地变化pop(区域)人口人口冲击tm/tms(商品,来源,区域)进口关税及其双边版本关税削减、自由贸易区tx/txs(商品,来源,区域)出口税及双边版本出口限制类政策to,tp,tg,tgd,tig产出税、私人消费税、政府消费税等国内税增值税、碳税与补贴初学阶段建议只碰这张表里的变量关税实验用tm或tms要素实验用qo通通不需要改闭合。把冲击写进文件直接求解结果是可解释的。4.3 冲击文件的写法关税清零的一个关键换算冲击文件.shk每行以Shock开头变量名带完整的集合下标分号结尾。以中国小麦进口关税从10%清零为例! tm 是“1税率”的百分比变化10%税率清零要冲击 -9.09 Shock tm(wht,CHN) -9.09; ! 若只针对美国来源改成双边变量 tms Shock tms(wht,USA,CHN) -9.09; ! 劳动力供给增加3%qo 默认外生直接冲击 Shock qo(UnSkLab,CHN) 3;参数说明tm是关税加1之后的「力」不是税率本身。10%的从价税对应1.10清零后变成1.00百分比变化是(1.00-1.10)/1.10×100-9.09。常见错误是拿税率直接冲击-10这样算出来的是“差不多清零”而不是“清零”福利结果会被系统性放大。常用税率对应的冲击值如下表可以直接查原关税率清零时的tm冲击值5%-4.7610%-9.0925%-20.0050%-33.33换算公式-t/(1t)×100t为从价税率。操作上先给冲击文件做一份备份再在Shocks页面逐条核对下标里的部门与区域代码是不是聚合后的名称——聚合后部门名变了旧实验的冲击文件一并作废。4.4 改闭合的写法把工资换到外生集合的swap当实验要求「工资外生、就业内生」就必须动闭合。典型场景是最低工资研究想让工资固定、就业量由模型决定。标准闭合里qo(禀赋)外生、工资p内生需要把两者位置互换在.cls闭合文件里写swap p(UnSkLab,CHN) qo(UnSkLab,CHN);逻辑说明GEMPACK的swap语句把左侧变量换入外生集合、右侧变量换入内生集合。这一行之后p(非技能工资)变成可以冲击的外生变量qo(非技能就业)交给模型内生决定。紧接着在冲击文件里写Shock p(UnSkLab,CHN) 10就得到了一个工资上涨10%、就业由模型调整的最小劳动力实验。初学者最容易把方向写反如果把qo写在左边闭合同样能通过编译但含义变成工资内生、就业外生结果方向完全反转。判据很简单闭合文件里只留这一个swap求解一次对比基期看就业变化方向是否符合经济学直觉。4.5 求解页的三个必调参数RunGTAP的Solve页面有三个参数决定求解质量分别是求解方法、步数与精度上限。方法上Gragg 2-4-6是默认推荐它用三组不同步长的解做外推对非线性较强的实验更稳Euler 1步只用于流程跑通验证结果只能看方向。精度上限通过日志判断GEMPACK会报告解的残差量级落到1e-4以下说明线性近似足够差得远就加密步数。三个参数的推荐配置一张表参数推荐值适用场景求解方法Gragg 2-4-6默认绝大多数静态实验Euler 1步仅流程验证新库、新闭合的冒烟测试步数面板4-8-12冲击超过±20%或结果不收敛时参数之间是配套关系方法决定算几次步数决定每次求解精度精度上限决定要不要重算。初次接触时不需要改这三个以外的东西模型一旦发散先回到4.2节的变量清单检查冲击量级而不是调求解器。5. RunGTAP求解与结果导出从SLM文件到福利分解的正确读法5.1 求解完成后工作目录里多出的三类文件点击Solve跑完后工作目录会新增三类文件以.SLM结尾的结果文件、以.UPD结尾的更新数据库、求解过程的.LOG日志。SLM用结果查看器打开存放全部内生变量的解UPD存的是冲击后新的价格、数量与关税收入数据递推模拟例如先做关税冲击、再做技术冲击用的就是更新库LOG里除了进度还包含精度报告。操作顺序固定为「先开SLM看变量再开LOG看精度」精度不达标的结果读了解释也是错的。RunGTAP的结果窗口支持按变量名过滤输入qo、EV这类关键词可以直接跳到对应表比逐层翻菜单快得多。5.2 从SLM里读哪些变量一张结果变量表结果文件里的变量可以看成一张按区域×部门排列的表。常用变量和对应问题如下想回答的问题变量部门产出变化qo(商品,区域)双边出口量变化qxs(商品,来源,目的)世界价格变化psw(商品)区域效用变化u(区域)福利的等值变差EV(区域)这些变量全部是百分比变化或货币等值导出后第一行是标签。注意qxs的读取方向qxs(wht,USA,CHN)表示美国对中国的出口量变化方向写反了结果不可解释这也是论文里贸易流量与贸易条件最常被引错的位置。5.3 福利分解别只读EV一个数EV只有一个总数政策建议依赖的是它的构成。RunGTAP里可以对EV做分解得到福利变化的来源配置效率、禀赋变化、技术变化、贸易条件等几项。做法是在结果界面选中EV调用AnalyseGE进行分解结果按来源列成一张表。解读规则贸易条件项不来自本国政策本身而是进出口价格相对变动带来的外部转移发表结论时要和配置效率项区分开配置效率项才是关税削减产生的真实收益。分解表可以另存为CSV之后用Python做批量绘图比在GUI里逐张翻快得多import pandas as pd d pd.read_csv(welfare_decomp.csv, encodinggbk) print(d[d[区域] CHN]) import matplotlib.pyplot as plt d.set_index(区域).plot(kindbar, titleEV Decomposition by Region) plt.tight_layout() plt.savefig(ev_decomp.png, dpi150)逻辑说明pandas读取RunGTAP导出的CSV后按区域筛选第二段直接生成分组柱状图。编码用gbk是因为RunGTAP在中文Windows下导出文件默认按本地代码页在Linux环境里导出把encoding改成utf-8即可。整个过程把结果整理从「手工抄表」变成「改参数重跑」也逼着把每次实验的冲击文件留档因为结果可复现的第一步是冲击可复现。6. RunGTAP挂起与单步排错三个立等可用的命令和一组参数6.1 点击Solve后挂起先查路径与进程再清残留文件求解卡住不外乎三个原因路径含非ASCII字符、授权文件没被识别、内存设置不够。前两个按第2章的方法检查内存设置在Options页面把求解内存从默认值往上调重跑一次。如果确定是求解中途挂起先看进程再动手Get-Process | Where-Object { $_.ProcessName -match GEMSIM|TABLO } | Select-Object ProcessName, Id Stop-Process -Name GEMSIM -Force参数说明第一行把可能残留的求解进程列出来第二行强制结束GEMSIM进程不会动任何文件。之后清理半成品把这次挂起产生的.log和未写完的.slm删掉再重新求解。挂起的文件如果不删RunGTAP有时会用旧的结果文件覆盖新结果白跑一趟。具体命令Remove-Item C:\gtapwork\model\*.log, C:\gtapwork\model\*.tmp -ErrorAction SilentlyContinue Remove-Item C:\gtapwork\model\GTAP.SLM -ErrorAction SilentlyContinue6.2 单步运行Euler一步把流程跑通再谈精度跑一个新聚合格局或新闭合时不要直接上Gragg 2-4-6。先把求解方法切换到Euler 1步用一次线性近似把整个流程打通这一步只确认文件链和闭合没问题不看数值。如果Euler 1步都发散回查4.2节的外生变量清单确认冲击量级没写错如果Euler能过而Gragg发散多半是冲击过大造成的非线性把冲击拆成两次连续小冲击分别跑用第二次实验的更新库作为起点这就是GTAP里的「单步运行」思路也是排查发散最省时的路径。6.3 把最小可复现实验固化成批处理模板参数确定之后把清理、备份、启动串成一条批处理避免每次手动删错文件echo off cd /d C:\gtapwork\model copy *.shk *.cls backup\ nul 21 del GTAP.SLM GTAP.LOG 2nul start C:\GPACK\RunGTAP.exe逻辑说明这段批处理每次运行前自动备份冲击与闭合文件清掉上次的求解产物再启动RunGTAP。参数上backup目录要提前建好RunGTAP.exe的路径按本机GEMPACK实际安装位置改。之后每轮实验只需要改.shk里的冲击值跑完对照backup目录里的旧版本结果差异来自哪一次改动一目了然。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价