恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
ARDL模型Stata实操全流程:混合单整协整检验与误差修正模型详解
首页
资讯中心
/
ARDL模型Stata实操全流程:混合单整协整检验与误差修正模型详解
ARDL模型Stata实操全流程:混合单整协整检验与误差修正模型详解
发布时间:2026/10/3 8:01:56
1. 为什么偏偏是ARDL这个模型解决的痛点不是普通回归能替代的做时间序列实证研究的人八成都有过这样的纠结手头一组变量有的平稳有的不平稳直接跑OLS怕伪回归全做差分又怕丢掉长期信息。传统协整检验要求所有变量同阶单整这个前提在实际数据里往往卡得很死。宏观经济数据里GDP、消费、投资这些序列常是I(1)但利率、汇率、某些政策变量有时就是I(0)混在一起的时候Johansen那套方法基本就废了。ARDL自回归分布滞后模型能在这几年火起来核心就一个原因它不要求所有变量同阶单整。Pesaran等人在2001年提出Bounds Testing方法时把变量的单整阶数放宽到了I(0)和I(1)混合的情况只要没有I(2)变量模型就能跑。这个特性让它成了实证经济学里处理混合单整数据的首选工具也是我在这篇文章里要重点讲清楚的东西。当然允许混合单整不等于什么都不用检查。我在实操中发现很多人拿着ARDL就当万能药拿到数据直接开跑结果一阶差分后还是不平稳或者根本不知道模型前还要做单位根检验。这篇文章的目标就很具体了讲清楚ARDL到底解决了什么问题、适用边界在哪里然后一步步演示在Stata里从数据准备、平稳性检验、滞后阶数选择、Bounds检验到误差修正模型ECM的完整操作流程。无论你是刚接触时间序列的硕士生还是被审稿人要求补做ARDL的科研党照着走就能跑出可复现的结果。需要特别说明的是本篇涉及的Stata操作基于我平时使用的Stata 16/17版本不同版本菜单和命令略有差异但核心语法和输出解读逻辑完全一致不影响复现。2. ARDL背后的数学逻辑不搞懂这个你连Stata报错都看不懂2.1 模型的基本形式一个式子看懂滞后结构ARDL模型的标准形式长这样[ y_t \alpha_0 \sum_{i1}^{p} \phi_i y_{t-i} \sum_{j0}^{q} \beta_j x_{t-j} \varepsilon_t ]通俗翻译一下当期被解释变量 (y_t) 不仅受当期解释变量 (x_t) 的影响还受自己和解释变量的历史值影响。这就是自回归AR部分(y_{t-i})和分布滞后DL部分(x_{t-j})两个词的含义。这个设定很贴近现实。比如研究货币政策对通胀的影响利率调整往往不会当月立刻完全传导到物价而是分几个月逐步体现甚至存在J曲线效应和滞后反应。如果在模型里只放当期利率你捕捉到的可能是严重偏误的短期效应长期均衡关系也被截断了。ARDL最常用的场景是处理非平稳时间序列的长期均衡关系经典的Bounds Testing边界协整检验形式可以写成[ \Delta y_t \alpha_0 \sum_{i1}^{p} \alpha_i \Delta y_{t-i} \sum_{j0}^{q} \beta_j \Delta x_{t-j} \theta_1 y_{t-1} \theta_2 x_{t-1} \varepsilon_t ]注意最后两项 (y_{t-1}) 和 (x_{t-1})这就是误差修正项的基础。它们的存在让模型同时包含了短期动态和长期均衡两套信息。短期关系靠差分项 (\Delta y_{t-i}) 和 (\Delta x_{t-j}) 体现长期关系则直接由水平值 (y_{t-1}) 和 (x_{t-1}) 捕捉。这个设定太巧妙了。我们平时做协整总想着先检验有没有长期关系再单独建模短期修复速度。ARDL直接把这两步合并到一个回归里了。如果 (y_{t-1}) 和 (x_{t-1}) 的系数联合显著就说明变量之间存在长期协整关系短期偏离会在下一期被拉回均衡这就是ECM误差修正模型的核心思想。2.2 为什么ARDL不要求同阶单整关键在于Bounds检验的临界值表这是ARDL最让新手困惑的地方。同阶单整检验是传统协整的前提但ARDL的检验逻辑完全不同。Pesaran等人在2001年构造了一套双临界值体系分两个极端情形假设所有变量都是I(0)查下界临界值假设所有变量都是I(1)查上界临界值。实际计算出的F统计量如果大于上界临界值就拒绝没有协整关系的原假设说明存在长期关系如果小于下界则不能拒绝原假设如果落在两者之间结论不确定。我知道这个机制说起来可能还有点绕。打个比方就像判断一个人能不能扛住重物传统方法要求先测清楚他确实有100公斤的力气才能搬100公斤的东西同阶单整ARDL的方法则是给定一个重量范围比如80到120公斤只要他的力气落在这个区间上方就认为他能扛住至于具体是90还是110公斤不那么重要了。这个区间就是两个临界值之间的区域变量实际单整阶数只要落在这个范围内检验结论就是稳健的。这也解释了为什么ARDL能容忍I(0)和I(1)混合它压根不需要你精确知道每个变量的单整阶数只需要确认没有I(2)变量就行。I(2)变量的二阶差分才平稳其行为特征和I(0)/I(1)差异过大会直接破坏临界值的有效性所以预检验的核心任务就变成了排查I(2)。2.3 ARDL的适用边界什么情况下别用它这里必须说实话ARDL不是万能的。我在给研究生改论文时见过不少乱用的情况第一有I(2)变量就别用。尽管ARDL可以处理混合单整但这个混合的范围严格限制在I(0)和I(1)。如果你的利率或价格指数是I(2)必须先做变换或换模型。这一点在Stata操作中必须在单位根检验后就确认清楚。第二样本量太小或太大都不好。ARDL的临界值是基于大量模拟得到的大样本渐近分布小样本比如30个观测下需要考虑小样本修正版本Narayan, 2005专门做了小样本临界值。当然样本量特别大时ARDL也未必最优比如日频金融数据动辄几千个观测更合适的可能是GARCH族模型。第三结构性断点会干扰结果。ARDL本身不擅长处理突变regime shift如果数据涵盖了重大政策变革、金融危机等时期建议在模型中加入虚拟变量或者用CUSUM检验做稳定性评估。这个在Stata里跑完模型后可以顺手做掉后面我会演示。第四ARDL解决的是单方程协整问题如果研究系统里存在多个协整关系、变量之间存在双向因果那就超出ARDL的范畴了应该考虑VAR或VECM。3. Stata里的完整操作流程从数据导入到底层命令逐个拆解这一部分是最核心的实操环节。我按完整流程一步步写每一步都解释为什么这么做以及常见报错的应对方案。3.1 数据准备与变量定义拿到原始数据后先做这三件事ARDL对数据格式要求不复杂但有几项前期清理工作必须做扎实时间变量必须是Stata能识别的日期格式。如果你的数据是年度数据比如1970到2023年共54个观测建议生成一个年份变量year然后用tsset year声明时间序列结构。月度或季度数据同理可以用tsset yearq或tsset yearm。没有声明时间序列结构的直接后果是后面所有滞后算子L.y、L.x都无法使用Stata会直接报错time variable not set。检查缺失值。ARDL的估计本质上还是OLS框架哪怕缺失一个观测都可能导致整个样本量变小、参数估计不稳定。时间序列数据尤其要警惕内部缺失比如某年统计口径调整导致数据为空建议用misstable summarize检查不能留空。建立变量清单。先想清楚哪些是核心解释变量、哪些是控制变量。ARDL理论上支持多个解释变量但每多一个变量滞后项的组合数就会爆炸式增长本来就不大的样本量很快会被吃干榨尽。我一般建议核心模型不超过3到4个解释变量否则做滞后阶数选择时AIC/BIC会把模型拖到过拟合。假设我现在有个数据集变量包括经济增长率gdp、通货膨胀inf、利率int和汇率exr目标是研究通胀、利率和汇率对GDP增长的长期和短期影响。数据导入完成后第一行代码永远是tsset year3.2 单位根检验ADF和PP怎么配合使用才靠谱前面反复强调I(2)是ARDL的禁区所以在正式建模之前单位根检验是绕不开的步骤。Stata里最常用的是ADF检验dfuller命令和PP检验pperron命令。ADF检验的原假设是序列存在单位根也就是非平稳。P值小于0.05意味着拒绝原假设序列平稳。这里有个新手特别容易踩的坑ADF检验对滞后阶数的选择非常敏感不同滞后阶数可能得出完全相反的结论。我习惯的做法是先用dfuller gdp, lag(1)跑一次再根据结果尝试多个滞后阶数看结论是否稳健。如果某个变量在不同滞后阶数下结论飘忽不定就需要警惕该序列是否接近单位根过程这时最好结合PP检验一起判断。PP检验的优点是它自动修正了异方差和序列相关对检验统计量的影响不依赖指定的滞后阶数和ADF可以形成交叉验证。我通常会同时对水平和一阶差分做检验逻辑是这样的如果水平序列不平稳、一阶差分序列平稳则该变量是I(1)如果水平序列就平稳则是I(0)如果一阶差分后仍不平稳就要对二阶差分做检验一旦发现I(2)就要考虑变量变换或调整模型设定。下面是一段完整的Stata命令示例* 对水平值做ADF单位根检验 dfuller gdp, lag(1) trend dfuller inf, lag(1) trend dfuller int, lag(1) trend dfuller exr, lag(1) trend * 对一阶差分做ADF单位根检验D.gdp表示gdp的一阶差分 dfuller D.gdp, lag(1) trend dfuller D.inf, lag(1) trend dfuller D.int, lag(1) trend dfuller D.exr, lag(1) trend * 用PP检验做交叉验证 pperron gdp, trend pperron inf, trend pperron int, trend pperron exr, trend pperron D.gdp, trend pperron D.inf, trend pperron D.int, trend pperron D.exr, trend运行完之后你会得到一张类似下面的结论表。我随便写几行做个示范具体数值因数据而异别照抄变量水平ADF p值一阶差分ADF p值结论gdp0.3120.001I(1)inf0.028—I(0)int0.1870.004I(1)exr0.4520.000I(1)如果结果像这样inf是I(0)其他是I(1)那正好是ARDL最擅长的场景——混合单整而且没有I(2)放心往下走。3.3 滞后阶数选择AIC/BIC不是越小越好要结合残差诊断ARDL的估计结果对滞后阶数p和q非常敏感。p是被解释变量的自回归滞后阶数q是每个解释变量的分布滞后阶数。如果p和q选得不合适残差可能有自相关Bounds检验统计量也会失真。Stata中我一般这样操作先初步估计一个ARDL模型带上一定阶数的滞后然后让Stata自动比较不同滞后阶数的AIC/BIC。如果你有ardl命令外部命令需要先安装后面会说安装方法可以直接用ssc install ardl安装完就可以跑ardl gdp inf int exr, lag(2) maxlag(4) aic这条命令的意思是对gdp、inf、int、exr建立ARDL模型考虑最大滞后阶数为4按AIC自动选择最优滞后阶数组合。如果不用ardl命令也可以退而求其次用普通回归和循环语句做手动选择。但说实话ardl命令可以自动输出所有滞后组合下的AIC/BIC并直接标出最优组合效率高得多。我强烈建议安装。需要注意一个细节maxlag的设定不能太大。年度数据建议最大滞后2到3期季度数据可以到4到8期月度数据可以到12期左右。滞后阶数设得太高会消耗大量自由度尤其在小样本下会导致估计不稳。我见过有人把月度数据的maxlag设到24期样本只有120个结果模型自由度过少估计结果彻底失去解释力。选定最优滞后阶数后必须立刻做残差诊断。3.4 残差自相关检验做不好这一步协整结论直接作废Bounds检验的前提是残差不能存在序列相关。如果残差有自相关问题F统计量的分布就会偏离Pesaran的临界值表你查表判断协整与否的方法就失效了。在Stata里跑完ARDL之后可以用下面的命令做残差自相关的拉格朗日乘数检验LM检验estat bgodfrey这个命令的原假设是不存在自相关检验的是滞后1到k阶的残差是否存在序列相关。如果p值小于0.05拒绝原假设说明残差有自相关问题这时候不能急着做Bounds检验应该回到模型设定增加滞后阶数或用更合适的滞后结构。我遇到过一种比较隐蔽的情况残差自相关检验的p值看上去挺好比如0.18但把滞后阶数从4改成6之后模型整体的AIC明显下降同时残差自相关也消失了。也就是说AIC/BIC选择的最优模型不一定能通过残差诊断两者需要平衡。我的习惯是先在AIC/BIC选择结果附近手动尝试调整一到两阶看残差lm检验的表现。哪里表现好、又不太过拟合就用哪个设定。3.5 Bounds检验边界协整检验Stata命令与结果解读确定滞后阶数并通过残差诊断后终于可以进入Bounds检验了。这个检验的目标非常明确判断变量之间是否存在长期协整关系。在ardl命令框架下直接跑ardl gdp inf int exr, lag(2) maxlag(4) aic bc其中bc选项表示同时展示Bounds检验结果。Stata的输出会包含F统计量和对应的临界值表格。这个表格是Pesaran et al. (2001)的临界值分为I(0)下界和I(1)上界。F统计量大于上界临界值拒绝不存在长期关系的原假设说明变量间存在协整关系。如果F统计量落进两个临界值之间结论就是不确定的。这时候怎么办我一般会试着调整滞后阶数或者换一个被解释变量再看。此外也建议结合ECM项误差修正项的显著性来做辅助判断后面会讲到。这里再强调一次ardl命令的安装问题它是外部命令需要先ssc install ardl网络正常情况下一次就能装上。如果你没有安装命令可能会出现command ardl not found的报错解决办法很简单先安装即可。3.6 长期系数和短期ECM模型实证结果怎么解读如果Bounds检验确认存在协整关系接下来就是获取长期系数和短期动态误差修正模型。这两块内容是一篇实证论文的核心表格。使用ardl命令时可以这样获取长期系数ardl gdp inf int exr, lag(2) maxlag(4) aic bc ecec选项会在输出中直接给出ECM模型结果。ECM模型的被解释变量是$\Delta gdp$解释变量包括$\Delta inf$、$\Delta int$、$\Delta exr$的当期和滞后项以及一个关键的误差修正项记为EC或ECT。误差修正项的系数就是短期偏离长期均衡时的调整速度理论上应该为负且显著。比如系数是-0.35意味着当期的短期偏离在下期会有35%被修正回长期均衡。长期系数则可以直接通过回归结果中的水平值系数计算得到也就是$y_{t-1}$、$x_{t-1}$这些项的系数经过一定变换后的值。如果嫌手动计算麻烦可以使用ardl命令之后配合nlcom命令做非线性参数组合来获得标准误。还有另外一种思路在Bounds检验通过后直接用变量水平值做一条普通最小二乘回归得到长期弹性系数。两条路线结果应该一致前者更容易把长期与短期的关系讲清楚。3.7 模型稳定性检验CUSUM和CUSUMSQ怎么用一篇严谨实证论文的标配是在ARDL分析之后附上CUSUM累积和和CUSUMSQ累积平方和稳定性检验图。这个检验用来判断模型参数在样本期间内是否保持稳定应对前面提到的结构断点问题。在Stata中在ARDL估计结束后运行estat stability或者外部命令cusum6 gdp inf int exrCUSUM图通常画的是随时间变化的累积统计量以及上下两条5%显著水平的临界线。如果统计量曲线始终落在两条临界线之间说明模型参数是稳定的只要曲线钻出边界就说明样本中可能存在结构断点。CUSUMSQ是对累积平方和的检验它比CUSUM对参数变化的敏感度更高很多人会同时看这两个图。如果CUSUM稳定但CUSUMSQ不稳定我会优先关注CUSUMSQ的结果因为它在检测方差结构性变化上更有优势。4. 从手动估计到命令式操作ardl命令的功能拆解与替代方案4.1ardl命令的选项说明与输出解析ardl外部命令是本篇操作流程里的绝对主力值得把它从选项到输出拆开讲一遍。完整语法是ardl depvar indepvars [if] [in] [, options]常用选项如下选项作用lag(#)设定自回归滞后阶数pmaxlag(#)设定解释变量最大滞后阶数结合aic或bic使用aic按AIC自动选择最优滞后组合bic按BIC自动选择最优滞后组合bc输出Bounds检验结果ec输出误差修正模型结果trend在模型中加入时间趋势项如果数据是季度或月度数据还可以加季节虚拟变量。大体的业务判断是年度数据至少考虑趋势项季度数据考虑季节效应月度数据则必须处理季节性。4.2 没有ardl命令时怎么办手动OLS的做法如果因为网络原因装不了ardl命令或者你希望完全透明地控制每一步估计可以完全手动操作。手动做ARDL的步骤如下用regress命令跑完整ARDL回归。假设p2、q2命令如下regress gdp L.gdp L2.gdp inf L.inf L2.inf int L.int L2.int exr L.exr L2.exr保存残差并对残差做LM自相关检验。构造误差修正项。将$y_{t-1}$、$x_{t-1}$线性组合作为误差修正项放进一阶差分回归中gen ec gdp - _b[L.gdp]*L.gdp - _b[L.inf]*L.inf - ... regress D.gdp D.inf D.int D.exr L.ec需要注意手动做这个流程的最大挑战在于系数的代数关系容易出错尤其是长期系数的计算和标准误的推导。我自己的体会是手动方式可以更清楚地理解每一个数字是怎么来的但效率确实低了不少。镜像结论是如果只是想写论文拿个结论建议直接用ardl命令。4.3 外部命令安装失败的常见原因安装ardl时如果提示connection timed out或http //www.stata.com ... no such file通常是网络问题。可以尝试多试几次ssc install ardl有时候第一次连接超时第二次就好了。手动去SSC官网下载ardl.ado和ardl.sthlp文件放进Stata的ado/personal目录。安装后运行help ardl确认命令是否可用。这类命令安装问题和Stata本身无关更多是网络环境导致。建议在有稳定网络的环境下操作实在不行也可以使用varsoc和regress命令手动完成。5. 实证结果汇报的学术规范表格里该放什么怎么说才严谨这一节讲的是论文写作层面的东西很多人模型跑出来了结果汇报却漏洞百出。这里分享一些实用的规范和格式。5.1 长短期关系分离汇报严谨的ARDL论文通常会分两张表汇报结果长期系数表列出各解释变量与因变量之间的长期均衡关系包括系数、标准误和显著性星级。短期动态ECM表列出差分项的系数、误差修正项系数以及模型的拟合优度、残差诊断结果。长期系数的解读要特别注意单位。比如解释变量是利率百分比单位系数0.25意味着利率每提高1个百分点长期来看GDP增长会提高0.25个百分点。短期系数解读同理但强调的是短期波动的影响。5.2 Bounds检验结果的呈现方式汇报Bounds检验结果时需要包含F统计量、显著性水平1%、5%、10%、对应的I(0)和I(1)两个临界值。通常用表格形式展示然后说明F统计量落在哪个区间、结论是什么。比如F统计量为6.87高于5%显著性水平下的上界临界值4.35因此拒绝不存在协整关系的原假设表明变量间存在长期均衡关系。这句话要写得清楚、不模棱两可。5.3 残差诊断和稳定性检验的汇报残差诊断部分至少要报告LM自相关检验的p值、正态性检验如果你做了和异方差检验结果。这些指标证明你的模型设定是可靠的。稳定性检验部分一般把CUSUM和CUSUMSQ图放上去正文中用曲线均在5%显著性水平临界线以内这样的表述概括即可。6. 置信区间之外的坑从审稿意见回到数据本身走到这一步ARDL的整个流程基本跑通了。但作为经常和审稿人打交道的人我还有几句掏心窝的话想讲。审稿人对ARDL最常见的质疑第一是你有没有做单位根预检验第二是你的滞后阶数选择标准是什么第三是你的模型稳定性如何。如果你提前把单位根检验、AIC/BIC选择过程、残差诊断和CUSUM检验都做扎实了这几个问题基本都能给出满意的答复。另一个大家容易忽略的细节是样本量的影响。Pesaran的临界值表是渐近临界值样本量越小结论越可能失真。Narayan (2005)提供了小样本临界值。如果你的样本量小于60建议引用Narayan的临界值表而不要直接套用Pesaran的大样本表。还有一个实用建议是不要把ARDL当成唯一的方法。如果结果特别敏感换个滞后阶数结论就变那就说明模型本身不够稳健。这时候可以尝试用动态最小二乘法DOLS或完全修正最小二乘法FMOLS做交叉验证看看长期系数是否一致。一致性越高结论越可信。7. 完整Stata操作命令流一份可直接复制运行的范本为了方便你直接上手我把整个流程整理成一份可以按顺序执行的命令流以年度数据、4个变量为例。数据集只要包含year、gdp、inf、int、exr五个变量就能跑* 1. 时间序列声明 tsset year * 2. 单位根检验 dfuller gdp, lag(1) trend dfuller inf, lag(1) trend dfuller int, lag(1) trend dfuller exr, lag(1) trend dfuller D.gdp, lag(1) trend dfuller D.inf, lag(1) trend dfuller D.int, lag(1) trend dfuller D.exr, lag(1) trend * 3. 安装ARDL外部命令 ssc install ardl * 4. ARDL模型估计选择最优滞后输出Bounds检验和ECM ardl gdp inf int exr, lag(2) maxlag(4) aic bc ec * 5. 残差自相关检验 estat bgodfrey * 6. 模型稳定性检验 estat stability * 7. 保存估计结果 estimates store ardl_model跑完之后你需要重点关注以下几个输出最优滞后阶数组合比如ARDL(2,1,2,0)Bounds检验的F统计量和临界值比较结论长期系数的符号、大小和显著性ECM项的系数是否为负且显著这决定短期调整机制是否成立bgodfrey检验的p值是否大于0.05残差无自相关。如果以上几点都符合预期那恭喜你ARDL实证研究的主体工作就完成了。根据我自己的实际经验第一次跑ARDL通常不会一路顺畅。一个小建议是拿到数据先别急着跑模型先花半小时画图用tsline命令画出每个变量的时间走势图对数据的基本形态心里有数。很多异常结果比如系数符号不对、Bounds检验不通过看图往往比看统计量更能发现问题。数据是歪的、趋势是断的、样本期里有明显突变这些预处理阶段的判断才是整个ARDL分析里最有价值的部分。