VAR模型与Stata实操:从时间序列分析到论文实证 1. VAR模型入门为什么论文里它如此常见最近几年经济金融类论文里出现频率最高的计量模型向量自回归VAR绝对算一个。不管是宏观政策效应评估、股价与宏观变量的动态关系还是行业间的溢出效应VAR模型几乎是标准配置。但很多同学第一次跑VAR时会遇到一个尴尬局面命令敲下去了结果也出来了但不知道怎么看、怎么解读、怎么写进论文。甚至有人把VAR和VECM混为一谈直接把滞后阶数选错导致后续脉冲响应结果完全不可信。我最初接触VAR是在做某宏观经济课题的时候当时导师只给了一句话“把所有内生变量丢进去跑个VAR看脉冲响应。”听起来简单实操起来全是坑。样本期怎么选、变量顺序怎么排、滞后阶数用什么准则定、稳定性检验要不要做、协整关系存在时该怎么处理这些问题不搞清楚跑出来的结果就是一堆数字根本没法用。这篇文章就是把VAR从原理到Stata实操完整梳理一遍。我不会堆公式也不会照搬手册而是把每一步操作背后的逻辑讲清楚再把可直接复制的命令和论文汇报模板给出来。适合正在写实证论文、做课程作业以及刚接触时间序列数据分析的读者。2. 模型构建前的关键准备变量选择与数据清洗2.1 变量选取的内在逻辑与常见误区VAR模型的一大优势是不需要事先区分内外生变量所有变量在系统内地位对等由数据自身说话。但这绝不意味着可以把变量随便往里丢。变量选取必须要有经济理论或现实逻辑作为支撑否则就是“垃圾进垃圾出”。我见过不少案例为了凑模型把七八个相关度极低的宏观变量一起塞进去结果滞后阶数巨大、自由度急剧损耗、脉冲响应图乱成一团。VAR对参数个数非常敏感每个方程的参数数量是k*p个k为变量数p为滞后阶数变量每增加一个估计参数会成倍增加。例如4变量、滞后4期的VAR模型每个方程要估计4×416个系数外加常数项4个方程总共超过60个参数。样本量不够时就非常容易过度拟合。实操建议核心变量控制在3到5个优先选择理论基础明确、频率一致、样本期内含义稳定的指标。做货币政策分析时常用产出、通胀、利率的组合做汇率传递效应时常用汇率、进口价格、CPI的组合做行业传染效应时则选不同市场或行业指数。变量之间的先后排序也要有依据后面在脉冲响应部分详细展开。2.2 数据频率口径与样本期处理VAR要求所有变量的观测频率一致且时间点对齐。实际操作中最大的麻烦来自数据频率不统一比如GDP只有季度数据而政策利率是月度数据股价指数甚至可以做日度数据。处理方式一般有三种高频转低频取平均值或期末值、低频插值补齐、或者干脆统一用低频数据建模。从稳妥角度我建议优先采用统一低频的策略插值数据容易引入人为平滑噪音导致估计结果虚假精确。样本期的选择上尽量避开结构性突变明显的时间窗口。VAR假设变量之间的关系在样本期内相对稳定如果包含汇率制度改革、重大危机这类事件模型估计结果会被严重扭曲。稳妥的做法是把样本期切成段分别做稳健性检验或者引入虚拟变量做干预分析。我自己的习惯是先画所有变量的时序图直观看看有没有明显的断点或异常波动看着就不对劲的区间宁可不纳入模型。数据清洗阶段的另一个重点是处理缺失值和异常值。Stata里可以用tsfill填补时间缺口缺失少的用线性插值或者前值填充缺失严重的变量直接放弃。异常值方面对数化能有效压缩极端值影响金融数据几乎一律取对数差分或对数水平值。2.3 变量的变换方式平稳性优先还是经济含义优先这是一个经典纠结。取对数能让数据平滑且系数具有弹性解释取差分能让非平稳序列变为平稳序列但差分也意味着变量含义从“水平值”变成了“增量”。我的处理原则是如果变量本身是比率类指标利率、失业率、通胀率直接用水平值如果是指数或绝对值类指标GDP、股价、货币供应量先取对数再根据平稳性检验决定是否差分。需要提醒的是不要机械地先差分再建模。如果变量之间存在协整关系差分后的VAR会损失长期信息此时应该用向量误差修正模型VECM而非普通VAR。实际操作顺序应该是平稳性检验 → 协整检验 → 如果存在协整考虑VECM如果不存在使用差分后的平稳序列建VAR。后面的章节会一步步走流程。3. Stata全流程实操从数据导入到模型估计3.1 数据准备与时间序列声明第一步是让Stata认识时间序列数据。假设数据文件为macrodata.dta包含年份、季度、gdp、cpi、rate三个变量。如果数据是季度频率需要先声明时间变量use macrodata.dta, clear tsset quartertsset之后用tsline gdp cpi rate画时序图确认数据的整体走势用describe查看变量存储类型和样本范围。这个环节必不可少后续所有滞后运算、差分运算都依赖正确的时间序列声明。如果时间变量是字符串格式需要先用destring转换或gen新变量。常见报错repeated time values in sample说明时间变量有重复值要先duplicates report quarter并duplicates drop处理。如果时间不连续tsfill可以补齐时间缺口补完后变量值会变成缺失需要进一步填充或标注。3.2 平稳性检验ADF与PP的细节与操作VAR建模的必要前提是系统内变量平稳或者存在协整关系。最常用的检验是ADF单位根检验。Stata命令是dfuller gdp dfuller cpi, trend dfuller rate, lags(2)dfuller默认包含常数项trend选项添加时间趋势项lags(#)指定滞后阶数。判断顺序是先看时序图如果序列围绕零均值波动选不含趋势的ADF如果呈现明显趋势则要包含趋势项。两种结果不一致时例如带趋势项检验平稳、不带则不平稳多数情况是序列存在确定性趋势差分后再检验通常能通过。每个变量都要做一遍ADF和PP检验可以写个小循环提高效率。我在操作中习惯把检验结果手动记录在Excel里形成一张“变量-检验形式-ADF统计量-P值-结论”的表格写论文时直接引用。下面是一个可选的小批量实现思路foreach v of varlist gdp cpi rate { dfuller v, lags(2) }这里不做强制自动化提取输出简单逐个人工扫结果并记录表即可。注意ADF检验的滞后阶数通常根据SIC或AIC自动或手动选定阶数太少会导致残差自相关影响检验功效阶数太多会损失检验力。实践上我默认从lags(2)开始尝试再看estat bgodfrey或者检验残差是否白噪声。3.3 协整检验什么时候必须转向VECM如果原始变量水平值不平稳但同阶单整例如都是I(1)就要做协整检验。协整的经济含义是虽然单个变量随机游走但它们的某种线性组合是平稳的说明变量之间存在长期均衡关系。此时直接对差分序列做VAR会遗漏这个长期信息正确做法是VECM。Stata里做Johansen协整检验的命令是vecrank gdp cpi rate, lags(3) trend(constant)lags(#)这里指的是VAR系统中的最大滞后阶数trend(constant)表示协整方程中仅包含常数项。输出表格中会给出不同秩rank假设下的迹统计量和最大特征值统计量。选择能使检验统计量首次不拒绝原假设的秩作为协整个数。协整检验需要较大的样本量通常要求100个以上的观测值才相对可靠。样本较小时检验结果经常在“存在一个协整关系”和“不存在协整”之间摇摆。遇到这种情况我建议结合经济理论判断。如果理论上明显存在长期均衡例如货币需求方程里的货币量、产出、利率即使统计检验边缘不显著也可以选择VECM反之则老老实实用差分VAR。但如果样本确实有限过度依赖理论强行选择VECM而不报告检验结果细节审稿人通常不会轻易接受最好把两种情况都做出来以稳健性检验的形式呈现。3.4 滞后阶数选择信息准则与残差诊断的结合滞后阶数是VAR模型中最敏感的设定。阶数太小残差存在自相关估计结果有偏阶数太大参数过多、估计方差爆炸。Stata的定阶命令varsoc gdp cpi rate, maxlag(8)输出中会同时给出LR、FPE、AIC、HQIC、SBIC五个准则的结果每个准则会标记出最优滞后阶数。我的经验是五个准则意见不一致时优先看SBIC和HQIC因为这两个准则对参数惩罚更重更不容易过拟合。如果SBIC给出1阶、AIC给出4阶我会在论文中使用1阶或2阶作为主设定把4阶作为稳健性检验。定阶之后必须做残差诊断检查模型残差是否还存在自相关。命令var gdp cpi rate, lags(1/2) estat autocestat autoc输出的是LM检验结果原假设是“不存在自相关”。如果p值小于0.05就说明残差还有自相关需要增加滞后阶数。另外还要做残差正态性检验estat normality和稳定性检验后者非常重要。3.5 VAR模型估计与稳定性检验滞后期确定后直接估计VARvar gdp cpi rate, lags(1/2)这里的lags(1/2)表示从1阶到2阶全部包含等价于滞后2期。输出结果是一个包含多个方程的庞大表格每个方程对应一个因变量表格里是各滞后项的系数和显著性。论文中通常不需要报告完整系数表只需汇报滞后阶数、样本区间、信息准则值和残差检验结果完整估计结果可以作为附录。稳定性检验是VAR建模中绝对不能跳过的一步。它的本质是检查模型系统是否满足平稳条件直观判断方式是看特征多项式的逆根是否全部落在单位圆内。Stata命令varstablevarstable会输出特征根列表和一张单位圆图。如果所有特征根都小于1模型稳定如果有任何一个大于或等于1脉冲响应结果就不收敛结论完全不可用。顺带一提图形以graph export导出时建议设置中文字体支持否则标题和标签可能显示乱码。这里还有一个实际问题VAR中如果某个方程回归的R²特别低甚至低于0.1该怎么办这个现象在金融数据里很常见主要是因为金融收益率序列本身噪音大可预测成分本来就小。处理方法不是在VAR里强行提高拟合优度而是如实报告并合理解释。VAR的重点是动态关系而非拟合优度脉冲响应和方差分解才是核心产出。4. 核心产出解读脉冲响应、方差分解与Granger因果4.1 变量排序脉冲响应的成败细节脉冲响应函数IRF刻画的是某个变量的一个标准误冲击对系统内其他变量的动态影响路径。这个“标准误冲击”的识别依赖于误差项的分解也就是变量间的同期影响关系怎么分配。Stata默认使用Cholesky分解这种方法要求给变量排一个先后顺序排在前面的变量可以同期影响后面的变量但后面的变量只能滞后影响前面的变量。这意味着变量顺序直接决定脉冲响应的形态特别是短期效应。我举一个具体的例子如果把利率排在物价前面那物价同期对利率冲击的响应实际上就是零这个在解释时容易产生误导。怎么排核心原则是把“外生性较强、对当期影响敏感度最低”的变量排前面。宏观研究里常见排序是产出、物价、利率、货币量即实体经济变量在前政策变量在中间金融市场变量最后。我自己做过的汇率传导研究中排序是产出、汇率、价格、利率因为认为产出受汇率同期的直接影响比较小而汇率对进口价格的影响相对迅速。Stata操作中变量排序可以写为var gdp cpi rate, lags(1/2) irf create myirf, set(irffile) step(24) irf graph oirf, impulse(rate) response(cpi) yline(0)step(24)表示追踪24期脉冲响应月度数据就是2年季度数据就是6年。oirf表示正交化脉冲响应它基于Cholesky分解普通irf则是广义脉冲响应不依赖变量顺序。如果对排序没有足够把握至少做一组广义脉冲响应的稳健性对照。4.2 脉冲响应图的正确解读方式脉冲响应图解读有一个常见误区看到某条线偏离零线就急着下结论“存在显著影响”。严格来说只有加上置信区间之后才能判断显著性。Stata默认在irf graph中会绘制95%置信带。判读标准是如果置信带包含零线说明冲击效应在统计上不显著如果置信带完全位于零线上方或下方才说明效应显著。看图时还要关注几个信息点冲击后的初始方向、达到峰值的时间、效应收敛的时间。这些信息反映的是冲击传导的速度和持续时间。比如利率冲击对产出的影响如果呈现“先小幅正向、后来转负”的形态那是典型的价格之谜现象需要检查模型设定和数据构造是否合理。论文中报告脉冲响应时通常选择关键变量组合画图一般不把所有变量组合全部堆砌在一个图上。每张图配一段文字解释重点描述“响应方向、峰值大小、持续期、显著性”四个要素。我自己写实证论文时的习惯是正文放2到4张核心图其余放附录。4.3 方差分解读出变量的相对重要程度方差分解回答的问题是在预测误差的方差中有多大比例源于自身冲击、有多大比例源于其他变量的冲击。它帮助我们判断某个变量在整个系统中的影响地位。Stata命令irf table fevd, impulse(rate) response(gdp)输出的表格中每一行对应一个预测期限列表示来自各变量冲击的解释比例。关注点通常是某个外生变量冲击对目标变量的贡献是逐期上升还是衰减上升速度如何最终稳定在什么水平我的建议是论文中报告方差分解时选一个代表性的期限比如第12期或第24期做横向对比而不是把所有期限全部列出来。同一时期多个变量之间的贡献度才是读者最关心的信息。如果某个冲击对系统内其他变量的方差贡献长期接近零说明它在模型中几乎是一个孤立变量可以考虑是否真的适合放进系统。4.4 Granger因果最容易被过度解读的检验Granger因果检验在Stata里的实现是vargranger输出表格中每个方程都会给出“排除性检验”的结果检验某个变量的滞后项是否对另一个变量的当期值有联合解释力。如果p值小于0.05就称该变量在Granger意义上“导致”另一个变量。必须反复强调Granger因果不是哲学意义上的因果关系只是预测能力上的先后关系。某个变量Granger导致另一个变量只说明前者的历史信息有助于预测后者的未来值。论文写作中措辞要谨慎写“存在显著的预测关系”“在Granger意义上具有因果性”而不是直接写“导致了”。我见过很多论文把Granger因果结果做成一个大矩阵表格把原假设、统计量、p值全列出来。这种做法可以但要控制篇幅一般只报告主要发现的组合即可。常见处理是单独列出原假设和p值星号标注显著性水平表注说明“基于VAR(p)模型的Granger因果检验”。5. 论文应用与稳健性检验从结果到说服力5.1 论文中VAR模型部分的写作框架把VAR结果写进论文不是简单丢几张图和几个表格就行。一个规范的VAR实证章节通常包含这样几个模块。第一段写模型设定依据说明为什么用VAR变量选择的文献依据和经济逻辑。第二段报告数据情况样本区间、频率、来源、变量处理方式。第三段报告单位根检验结果说明为什么能用VAR而不是VECM或者反过来说明为什么用VECM。第四段报告滞后阶数选择结果哪个准则选了哪一阶。第五段报告模型估计和检验结果重点是稳定性和残差诊断。最后用脉冲响应和方差分解解释经济含义并结合前文理论做呼应。审稿人最关注的几个点一定要主动覆盖滞后阶数选择有没有依据、模型是否稳定、变量顺序变动会不会改变核心结论、稳健性检验是否充分。自己写的时候有意识地补全这些信息等于提前打消了审稿人的部分质疑。5.2 稳健性检验的常规套路论文审稿中很常见的修改意见是“请提供稳健性检验”。VAR模型的稳健性检验可以从以下几个维度展开改变滞后阶数。主模型用2阶稳健性检验换成1阶、3阶或4阶。改变变量顺序。对灵敏的Cholesky分解结果做顺序互换测试。改变样本区间。剔除金融危机、重大政策变革时期后的子样本回归。替代变量。用季调数据替代原始数据、用同比增速替代环比增速等。模型对比。如果主模型是VECM备选的差分VAR结果也放在稳健性部分。实际写论文时把2到3项稳健性检验写在正文其余的放在附录。全做一遍工作量不小但能显著提升结论的可信度。不要只做一项也不要把所有项目都堆在正文里让读者失去重点。5.3 多模型对比VAR与VECM、面板VAR的取舍论文选题和模型选择是一体的。这里有个实用的决策思路如果样本是单一国家/市场的宏观时间序列VAR或VECM是比较合适的选择如果样本包含多个国家和地区面板VARPanel VAR更适合因为能控制个体异质性同时利用横截面信息提高估计效率。Stata中实现面板VAR需要额外安装外部命令xtvar等。它的解读逻辑与时间序列VAR类似但在滞后阶数统一性和个体固定效应处理上有额外要求。我的建议是如果没有使用面板VAR的十足必要优先选择传统时间序列VAR实操难度更低审稿人熟悉的程度也更高。6. 常见问题排查一次实操全记录6.1 结果不显著、脉冲响应发散等典型状况我在做VAR的过程中遇到过不少让新手抓狂的情况这里列几个典型场景和处理办法。场景一所有系数都不显著。这是VAR模型中最常见的情况因为滞后项的共线性使得单个系数估计精度下降模型中有多个滞后项本身就分散了显著性。解决办法是关注联合检验而非单个系数的t检验。看Granger因果检验和脉冲响应置信区间这些指标对预测效应更敏感。如果确实全部不显著检查样本量和滞后阶数是否合适考虑减少变量个数或者缩短滞后阶数。场景二脉冲响应置信带特别宽。宽度通常意味着样本信息量不足或变量间关系太弱。此时可以考虑缩短预测期数做局部预测或者增加样本量。部分版本的Stata中irf的置信区间计算涉及蒙特卡洛抽样随机数种子差异也可能导致每次结果有细微差别但这不影响结论方向。场景三模型不稳定特征根接近或超过1。这是非常严重的问题。优先检查变量是否真的是平稳序列。如果有变量存在单位根却未做差分系统就会出现单位根问题。另外还要关注时间趋势项是否遗漏。处理方式是返回到平稳性检验和差分环节重新构造变量。场景四结果对变量顺序高度敏感。当变量间同期相关性较强时Cholesky分解结果确实会随变量顺序变化而产生明显差异。这就需要用广义脉冲响应来做对照并且通过经济理论确定一个合理的基准顺序在论文中如实说明排序依据和稳健性检验结果。6.2 易被忽视的数据操作细节几个容易踩的小坑一并提醒取对数时注意变量是否有非正值。若包含零或负数ln()会生成缺失值。金融收益率数据不用取对数直接进模型。差分后样本量会减少。做变量变换之前先确认样本是否足够。tsset之后不要随意sort原始时间序列会影响滞后运算。VAR命令中变量顺序就是Cholesky分解顺序。如果慢慢往后追加变量原有变量的脉冲响应也会随之变化。导出表格时Stata中esttab配合var命令并不稳定我一般用outreg2或者手动整理结果到Word。结果表格多时可以用esttab using var_results.rtf配合替换选项但务必检查导出的表格结构和数字精度。6.3 提升论文说服力的几个写作技巧实证论文里VAR模型部分最常见的批评是什么数据驱动、缺乏理论、模型设定随意。要避免这类批评写作技巧上可以做几件事。报告滞后阶数选择时不要只汇报最终选择把信息准则值的比较表格放出来读者能感受到选择过程的严谨性。做脉冲响应分析时围绕核心经济机制给出先验预期再与实证结果对照增加故事感。收敛速度做出经济解释。方差分解给出经济故事例如“第24期货币政策冲击对产出的方差贡献达到30%以上说明价格型政策工具在样本期内对产出波动具有重要影响”。小心处理“显著但很小”和“不显著但在预期方向”的结果如实报告合理的解读比好看的结果更重要。VAR是工具论文的价值在解释能力。7. 最后再分享几个实战心得VAR这个模型门槛不算低但也没有想象中那么高。它的“友好”体现在不用费尽心思找工具变量和外生性论证把变量一起丢进系统、让数据说话就行。它的“不友好”体现在所有设定选择都会直接影响结论滞后阶数、变量顺序、样本区间、变量形式处处都是决策点。我的实操体会是做VAR实验就像做菜菜谱可以照抄但火候得自己摸索。每换一组数据、每换一个研究问题模型选择的结果都可能有变化。与其到处找“最优参数”不如把诊断过程系统性地做一遍把每一步选择依据记录下来。这样得到的模型不一定完美但经得起追问和检验。最后分享一个小技巧做VAR之前先把数据的时序图、相关性矩阵、单位根检验结果放在一个文件夹里统一命名。后续无论写论文还是应付导师追问材料拿出来就很从容。而且一旦需要调整变量或样本期之前的诊断记录可以帮自己快速定位变化来源不至于从头再来。这些准备工作看似琐碎实际能节省大量时间也能让整个研究过程更加可控。祝各位跑VAR顺利。