1. 为什么偏偏是MS-VAR,以及为什么偏偏是GiveWin
做宏观计量的人,十有八九都遇到过这样的尴尬:明明理论模型说得头头是道,说经济变量在不同状态下应该有完全不同的动态关系,结果你拿着线性VAR过去一估,显著性倒是出来了,但脉冲响应把你带向了一个“平均状态”——就好比你问一个人“你跑步和睡觉时的心率分别是多少”,他回你一个全天平均心率,道理没错,但根本没法用来做任何决策。
MS-VAR(马尔科夫区制转移向量自回归)解决的就是这个问题。它允许模型在不同“区制”(regime)之间切换,每个区制有自己的截距项、自回归系数、甚至方差,切换过程由一个不可观测的马尔科夫链驱动。放在宏观场景里,这就是把“经济处于扩张期”和“经济处于收缩期”当成两个独立状态来分别建模。相对区间转移和未知断点检测这类结构性突变方法,马尔科夫区制转移的优点在于:不需要提前指定断点位置,区制转移概率由数据自己估计,而且能给出“当前处于哪个区制”的平滑概率——这个东西做经济周期测度、金融压力指数构建、通胀动态分析时非常好用。
但实话实说,MS-VAR的上手门槛不低。方程要矩阵化建模,区制转移概率要做数值优化,还要处理识别约束和收敛性判断。市面上能直接做MS-VAR的软件不少,比如OxMetrics里就有专门的MSVAR模块。不过我还是想重点说说GiveWin——因为它是OxMetrics的宿主壳,不依赖复杂的脚本环境配置,数据读写、画图、结果输出全都在一个窗口里搞定,对于很多要做定期更新报告、时间紧任务重的人来说,这个工作流比纯脚本舒服得多。
这篇东西适合谁看?两类人。第一类,已经在用EViews或Stata做VAR,但觉得线性VAR解释不了“状态切换”的人;第二类,被导师或者客户问到“你这个模型能不能算一下经济处在什么状态的概率”的人。文章不会绕到推导的每个细节,重点放在“在GiveWin里到底怎么一步步落地”,以及那些说明书里不会写的坑。
2. 动手之前先搞清楚模型在做什么
2.1 一个例子快速理解区制转移逻辑
假设你研究的是利率对通胀的传导。线性VAR估计出来的结果是一个“平均传导强度”,但它很可能忽略了两个完全不同的事实:
- 经济平稳期:利率上调对通胀的压制效果温和、滞后时间长;
- 经济过热期:同样幅度的加息,会迅速改变市场预期,传导路径明显不同。
MS-VAR把这两种情况分别建模。模型本身不告诉你哪几个月是过热期,它通过数据估计一个“转移概率矩阵”,比如:
- 从平稳期转移到过热期的概率;
- 从过热期转移到平稳期的概率。
然后反推每一个时点分别有多大概率处在哪种状态。这就是“平滑概率”的用途——你可以画出一条状态概率曲线,直接在图上看出哪些时间段属于哪个区制。
2.2 MS-VAR与VAR、STAR、TVP-VAR的区别
这里容易乱,尤其是做汇报的时候被人追问“你这个跟STAR有什么区别”。我做了个表,方便直观对比:
| 模型 | 状态切换方式 | 转移规则 | 适合场景 |
|---|---|---|---|
| 线性VAR | 无切换 | 始终同一机制 | 变量关系稳定 |
| MS-VAR | 不可观测离散状态 | 马尔科夫链概率转移 | 经济周期、制度切换 |
| STAR(平滑转移) | 可观测阈值变量驱动 | 平滑函数连续过渡 | 阈值效应明显 |
| TVP-VAR | 参数时变 | 状态方程平滑漂移 | 长期结构性变化 |
核心区别在于:MS-VAR的状态是“隐变量”,你事后用概率去推断;STAR的转移变量是外生可观测的;TVP-VAR则是参数连续变化,没有“离散区制”这个概念。如果你只是想描述“危机期和正常期有区别”,MS-VAR是更自然的选择。
2.3 MS-VAR的两种常见设定,别选错
在实际建模里,最常见的两种设定是:
- 均值区制转移,即MS(M)-VAR:切换只影响截距项或均值,系数稳定。优点是参数少、容易收敛,适合状态划分清晰、但不强调动态乘数差异的场景。
- 系数区制转移,即MS(M)-VAR的扩展(有的叫MSIAH):截距、自回归系数、方差都随区制变化。表达能力最强,但参数暴涨,极易遇收敛困难。
我的建议是:如果样本量不到几百个观测值,先别急着上系数区制转移。否则大概率陷入“局部最优出不来”的尴尬。先从均值转移做起,把区制个数的选择(通常是2或3)放在模型比较阶段再定。
注意:GiveWin里的相应模块操作路径很直观,但背后对参数初值非常敏感。后面第4节会详细讲怎么处理初值问题——这是所有MS-VAR实操里最容易被低估的一环。
3. GiveWin环境下的模型搭建与数据准备
3.1 GiveWin里跑MS-VAR的整体思路
GiveWin本身是一个宿主窗口程序,主要任务是管理数据、查看图形、输出表格。你真正跑的估计引擎是Ox,但你不必像用纯Ox那样从头写估计代码——通过GiveWin的菜单化界面和批处理文件配合,能在图形界面里完成大部分操作。
整体步骤拆开看:
- 准备数据文件,导入GiveWin;
- 根据变量特征做平稳性检验、差分处理;
- 设定MS-VAR模型(区制数、滞后阶数、转移设定);
- 运行估计,检查结果文件;
- 提取平滑概率、区制划分、脉冲响应等结果;
- 输出图表和表格,整理到报告里。
这套流程的核心优势是:数据和图形在同一个界面里联动,你改一处理论设定,马上能看到数据窗口和图形窗口的变化,不用来回切换脚本编辑器。
3.2 数据导入与格式需要注意的细节
GiveWin支持的数据文件格式比较友好,常用的有文本文件(.txt/.csv)、Excel导出的数据、以及一些特有格式。但我强烈建议统一用文本文件导入,原因很简单:避免Excel自动改格式的坑。
举个我实际遇到的例子。某次做市场利率数据,Excel里明明看着是“0.0425”,导入GiveWin后却变成“0.042500001”——精度问题直接导致后续协整检验报出奇怪的统计量。后来排查了一圈,才发现是Excel源文件的单元格格式问题。从那以后,我的标准流程就是:在Excel或任意工具里整理好数据,另存为带分隔符的文本文件,再导入GiveWin。
数据文件的第一行通常是变量名,下面是从早期到后期的观测值。注意一点:GiveWin的默认时间频率设置要和数据实际频率一致。月度数据就别设成季度周期,否则滞后阶数的定义会错位,脉冲响应的横轴会莫名其妙。
3.3 平稳性检验与变量的预处理顺序
MS-VAR和VAR一样,要求变量体系平稳。但由于区制转移建模会涉及状态划分,多了一个“结构性断点不影响单位根检验”的特殊视角。我的实操习惯是:
- 先对每个变量做单位根检验;
- 若是非平稳,优先考虑差分;
- 但差分后要意识到:差分变量会损失长期信息,如果论文或报告需要解释长期均衡关系,要谨慎对待。
有一种情况需要特别注意:如果变量本身有明显的区制切换行为(比如利率在某些时段剧烈波动,某些时段非常平稳),常规单位根检验很可能误判。这种情况下,我一般会同时报告线性单位根检验和分段检验结果,作为稳健性参考。
提示:如果你拿不准“到底要不要差分”,一个实用的办法是:先用水平值跑一个初步的MS-VAR,再看残差是否平稳。如果残差基本平稳,说明水平值建模问题不大;如果残差有明显趋势,再考虑差分。这比纯粹按规范流程操作要高效得多——毕竟规范的尽头是“模型残差要干净”。
4. 在GiveWin中完成MS-VAR估计的关键步骤实战
4.1 区制数量与滞后阶数的确定
这是整个操作中最影响结果的部分。
区制数量的选择,在GiveWin里通常可以设定为2或3。2区制是最常见的选择,对应“扩张/收缩”或“高波动/低波动”。你要是设定3区制,往往会出现第三个区制样本量太少、参数估计不稳定、概率图三条线纠缠在一起难以解释的局面。我个人的经验是:先跑2区制,看平滑概率是否能把样本清楚分成两块;如果2区制的对数似然值明显偏低,或者区制划分在经济含义上有硬伤,再考虑3区制。
滞后阶数按信息准则来定,AIC和HQ在GiveWin输出里都能看到。但因MS-VAR需要同时估计转移概率矩阵,参数比线性VAR多不少,所以滞后阶数宁小勿大。月度数据常用1到2阶,季度数据常用1阶。你报模型的时候多用几个滞后阶数做敏感性分析就够了,不必追求信息准则给出的“最优”而引入不必要的参数。
4.2 参数初值处理:新手最常栽的坑
MS-VAR的极大似然估计本质上是一个非线性最优化问题。如果你把初值随便一给,大概率会陷入一个“局部极大值”——表面上迭代收敛了,但实际估计结果缺乏经济合理性。
具体表现为:转移概率矩阵极不均匀(比如永远停留在某一区制),或者区制1和区制2的参数几乎相同(等于白切)。
GiveWin模块里的处理逻辑是对初值有一定依赖的。我自己常用的笨办法是:
- 先把模型当成线性VAR估计一遍,把得到的系数作为区制1的初值;
- 区制2的初值在区制1基础上做小幅偏移;
- 转移概率矩阵初值用对称设定,比如0.85和0.15。
这套做法的好处在于:从一个经济意义上合理的点出发,让优化算法在附近寻找更好的参数组合,而不是从随机位置漫无目的地搜索。
注意:如果估计完成后发现“某个区制的概率始终接近1”,先别急着怀疑数据,大概率是你初值没给好、或者转移概率矩阵的初始对角线值太高,导致算法根本不会尝试离开初始区制。
4.3 识别约束与方差设定的选择
MS-VAR在使用中还有一个识别层面的问题:区制的标签(哪个是区制1,哪个是区制2)本身是任意的。你如果不加约束,算法可能第一次估计时把高波动状态叫区制1,第二次同样的数据却把高波动状态叫区制2。这就是“标签切换问题”(label switching)。
GiveWin场景下最常见的处理方式:
- 通过对方差或截距项施加不等式约束来固定区制含义。例如约定区制1的方差更小,区制2的方差更大;
- 或者在事后根据估计结果手动调整区制编号,让输出逻辑统一。
我更推荐前者,因为事后调整还需要同步修改概率图的图例和文字说明,容易在报告中出错。
4.4 一次完整的估计流程示例
假设我们有两个变量:产出增速(g)和通胀(pi),月度数据,120个观测值,想用2区制MS-VAR(均值转移形式)分析区制转换。
具体操作我会这样走:
- 在GiveWin中导入数据集,命名为example.in7;
- 双击变量名,画出时间序列图,确认没有明显趋势或异常跳点;
- 对g和pi分别做单位根检验,两者均平稳;
- 进入MS-VAR设定面板,内生变量选择g和pi;
- 设定区制数为2,选择均值转移形式;
- 滞后阶数先放1,后续做2阶稳健性备选;
- 参数初值按上一节方法设定,方差约束设为“区制1方差 < 区制2方差”;
- 点击估计,等待输出。
输出结果一般包含几个核心模块:参数估计表(各区制的截距、自回归系数、方差)、转移概率矩阵、区制平滑概率序列、对数似然值。你要最先看的不是系数的显著性,而是:
- 转移概率矩阵的对角线是否明显高于非对角线(说明区制持续性合理);
- 两个区制的截距或方差是否明显不同;
- 平滑概率图中是否存在多次跨区制转换。
如果这三项都合理,模型基本就立住了。如果有一项不合理,优先回去调初值或者换设定形式,而不是硬着头皮解释。
4.5 从输出结果中提炼“经济故事”
拿到估计结果后,我通常按这样的顺序提取核心信息:
- 区制划分的时点和时长。找平滑概率跨越0.5的时间点,这些就是模型识别出的“状态切换时点”,在报告里可以直接写“模型识别出X年到Y年为高波动区制”;
- 各区制的参数差异。重点看截距和方差差异,这是经济含义最直接的体现;
- 转移概率矩阵的持久性。对角线接近0.9以上说明状态非常“黏”,切换不频繁,区制间差异值得信。
一种比较有意思的应用是:用平滑概率做扩张/收缩的概率指数。比如月度平滑概率低于0.5视为收缩期,高于0.5视为扩张期,那么你可以构造一个“经济景气概率曲线”,比单纯看增长率本身直观得多。
5. 常见报错与估计异常的排查技巧
5.1 数值收敛失败:别只盯算法,先看你的初值
这是出现频率最高的问题。GiveWin的估计窗口显示“收敛失败”时,很多人第一反应是调最大迭代次数。实际上,如果初值距离最优解太远,加大迭代次数只会让程序在一个错误方向上反复横跳。
排查顺序建议:
- 先检查数据是否标准化。如果两个变量的数量级差太多(比如一个是0.01级别,另一个是1000级别),建议先做标准化。这不是为了让估计结果改变,而是为了让数值优化过程更平稳;
- 换初值。把区制2的初值偏移调大一点,逼算法探索更远的位置;
- 换设定。从均值转移换成同方差设定,减少参数规模,先跑通再扩。
5.2 区制概率出现“频繁切换”
有些模型估计出来以后,平滑概率在0.5附近来回穿越几十次,画出来跟锯齿一样。这种情况往往不是因为真的存在那么多状态切换,而是因为你把方差和均值分开建模后,模型用“频繁变化”去拟合噪声。
处理办法:
- 减少区制数,从3降到2;
- 增加转移概率矩阵的持续性偏好——在初值设定上把对角线概率调更高,比如0.95,让模型更倾向于“黏住”当前状态;
- 检查是否存在异常值,极端值会拉出一个短命区制。
5.3 转移概率矩阵对角线接近1或接近0
对角线接近1,意思是状态几乎从不切换。这时你要确认是否真的存在区制转移,很可能数据本身没有明显的状态分离,是模型强行切了两块。一个快速判断方式:看两个区制的参数差异大不大,如果差异很小,说明MS-VAR相对于线性VAR没有带来额外解释力。
对角线接近0则是另一个极端,意味着系统在两个状态间疯狂跳转,没有持续性。这个场景通常意味着你设定的区制个数太多,或者某个区制对应的参数在经济与实际逻辑上说不通。
5.4 典型问题速查表
| 症状 | 常见原因 | 优先排查方向 |
|---|---|---|
| 估计不收敛 | 初值太差/变量量级差异大 | 标准化、换初值 |
| 平滑概率锯齿状 | 区制过多/数据含异常值 | 减少区制数、检查数据 |
| 区制1和区制2参数几乎相同 | 数据本身状态分离不明显 | 换变量组合、改用其他模型 |
| 转移概率矩阵对角线约1 | 模型过度设定 | 检查是否真的有区制转移 |
| 概率图区制标签混乱 | 未加识别约束 | 设定方差或截距大小顺序 |
6. 结果的可视化与报告呈现
6.1 概率图、区制划分图和脉冲响应
GiveWin的图形模块可以直接生成时间序列图,如果要从估计结果中提取平滑概率序列并自行绘图,建议导出数据后在Python或Excel中完成。
我自己比较常用的画图组合是:
- 第一张:原始序列与区制阴影图。把平滑概率大于0.5的时期用阴影标识出来,直接叠在变量序列图上,观众一眼就能看出“哪个时段处于高波动状态”;
- 第二张:平滑概率折线图。两条或三条概率线,加一个0.5的参考线,简洁清晰;
- 第三张:不同区制下的脉冲响应图。这是模型解释力的最佳体现——展示同一个冲击在不同区制下的差异化传导路径,也是MS-VAR相对于线性VAR最有说服力的地方。
脉冲响应图建议不要一张图塞三条线,排成上下两格或左右并排,每格一个区制,标注清楚,否则非专业读者容易混淆。
6.2 参数表在报告中的整理规范
报告中的参数表,建议用两套表格来呈现:
- 主表:各区制截距、自回归系数、方差,加星号标注显著性;
- 辅表:转移概率矩阵和期望持续期(expected duration)。
期望持续期是一个很容易被忽视但很有信息量的指标。它的计算公式是1除以(1减去对应状态的对角线概率),表示“一旦进入某一区制,平均会停留多少期”。比如对角线是0.9,期望持续期就是10期(月度数据就是10个月)。这个指标比单纯报转移概率直观得多,适合直接写进报告结论。
7. 我的几点实操体会与建议
说实话,MS-VAR这个模型用熟练之后,真正费时间的往往不是估计本身,而是前期的设定选择和后期的结果解释。以下几个经验我认为值得分享:
第一,不要一上来就用最复杂的设定。先用2区制均值转移跑通全流程,再逐步往系数转移和异方差方向扩展,每一步都要确认模型输出在经济含义上站得住脚。
第二,初值一定要花时间。GiveWin的图形界面会让你产生一种“点击即可得到结果”的错觉,但MS-VAR的本质还是非线性优化,初值决定了你最终是得到合理的区制划分还是得到一个垃圾结果。
第三,结果解释要有经济故事。平滑概率图形再漂亮,如果你说不清“为什么这两个区制应该有区别”,模型的价值就会大打折扣。建议每设定一个模型,都先问自己:我预期的区制差异是什么?数据是否支持这个预期?
第四,多模型对比是必须的。至少跑一个线性VAR作为基准,再跑2区制和3区制的MS-VAR,用对数似然值、信息准则、区制划分稳定性这三项做综合判断。纯粹依赖单一模型的输出,风险太大。
第五,Quandt-Likelihood Ratio统计量(或叫LR型区制检验,来自在原假设线性模型下对转移参数不可识别约束的检验)在正式报告里建议一并给出,它能在一定程度上为“模型是否真的需要区制转移”提供统计佐证。虽然这类检验的零分布是非标准的,但在实际汇报中作为一个参考指标很有说服力。
最后再分享一个小技巧:做区制划分的时候,不要只依赖平滑概率0.5这个绝对阈值。把平滑概率画出来以后,观察那些“长时间稳定在0.7以上”和“突然从0.9跌到0.2”的形态差异——后者才是真正的结构变化信号。很多短促的“类锯齿形”概率波动,本质上只是模型在拟合噪声。
所有模型背后的本质都是同一件事:在信号和噪声之间找到一个经济含义清晰、统计上稳得住的分界线。MS-VAR只是把这个任务形式化了,而你作为建模的人,既要有技术判断,也要有经济直觉。两者缺一不可。