☰
ARDL模型与Stata实操:从单位根检验到边界检验的完整指南
2026/10/3 1:03:05 网站建设 项目流程

做实证分析的人应该都清楚,时间序列数据里最麻烦的一件事就是:你手里的变量可能有的平稳、有的不平稳,直接跑普通最小二乘容易得到伪回归,可如果贸然做差分又会丢掉长期信息。ARDL(自回归分布滞后模型)之所以被大量使用,就是因为它能同时处理长期均衡关系和短期动态调整,还不用像传统协整方法那样要求所有变量必须同阶单整。这篇文章我会从模型原理讲到Stata实操,结合一个完整案例把每一个命令、每一行输出都拆开讲清楚,希望能帮你省掉自己翻文档、查贴吧的时间。


1. 先搞明白ARDL到底在解决什么问题

1.1 为什么我推荐ARDL

传统的协整检验,比如Engle-Granger两步法或者Johansen检验,都有一个比较严格的前提:所有变量必须是一阶单整,也就是I(1)。但实际研究里哪有那么听话的数据?很多宏观经济变量,像GDP、能源消费、人口、投资,有的原序列平稳(I(0)),有的差分后才平稳(I(1)),混在一起的情况非常常见。如果你非要把所有变量都差分成I(1)再去做协整,长期关系就没了;如果直接拿混着I(0)和I(1)的序列去做Johansen检验,结果又不可信。

ARDL模型的好处就在于:它允许解释变量和被解释变量里同时存在I(0)和I(1)的序列,只要没有I(2)就行。这一点在Pesaran和Shin(1999)、Pesaran、Shin和Smith(2001)的论文里已经给出了严格的证明。对于大多数做应用研究的人来说,这意味着你可以先不纠结单位根检验的结果,把建模流程大大简化。

另外一个很实际的优点是,ARDL在小样本下表现比Johansen检验好很多。Johansen检验本质上依赖VAR系统,参数多,对样本量要求高。ARDL本质上是一个单方程模型,虽然在滞后结构上也需要一定自由度,但比VAR省参数,对30到60个观察值的宏观数据集来说相对友好。我试过用48个季度数据跑ARDL,结果依然稳定,换做Johansen就会比较勉强。

1.2 模型的数学形式和数据要求

ARDL的核心思想是同时把被解释变量的滞后项和解释变量的当前项、滞后项放进一个回归方程里。一个最简单的双变量形式可以写成:

Δy_t = c0 + Σφ_i·Δy_{t-i} + Σβ_j·Δx_{t-j} + θ1·y_{t-1} + θ2·x_{t-1} + ε_t

这里的Σ部分刻画短期动态,而θ1·y_{t-1} + θ2·x_{t-1}这一组水平项则携带长期信息。如果θ1和θ2联合显著,就说明变量之间存在长期均衡关系(即协整),长期系数就是 -θ2/θ1。也就是说,ARDL用一个式子同时解决了长短期两个问题,这也是它名字里“分布滞后”的由来——解释变量对被解释变量的影响不是一次到位,而是分散在若干期里。

做ARDL建模一般对数据有几个基本要求。第一,时间维度不能太少,我个人的底线是不少于30个观察值,50个以上更稳;第二,必须是等间隔的时间序列数据,年度、季度、月度都行,但不要有缺失值突兀地断档;第三,变量不能是I(2)过程,因为ARDL的临界值表是基于I(0)和I(1)混合情形推出来的,遇到二阶单整,整个边界检验就失效了。所以虽然ARDL免掉了同阶单整的预检验,但单位根检验还是不能省。


2. 建模前的数据准备和单位根检验

2.1 变量怎么选、数据怎么整理

选变量这件事看起来朴素,其实决定成败。ARDL虽然是单方程模型,但它的协整关系对变量集合很敏感:少放一个重要变量,长期关系可能测不出来;多放一个无关变量,又会增大标准误、压低F统计量。我自己做研究时的习惯是,先画一张变量相关矩阵和散点图,用简单的相关系数初步判断是否存在明显的协同变化趋势,然后再结合经济理论确定进入模型的变量组合。别一上来就把七八个变量全塞进ARDL里,那样滞后结构会变得非常臃肿,小样本下基本跑不出稳定结果。

数据整理层面,时间序列最怕的是“隐式缺失”。比如你把不同来源的年度数据合并在一起,一个序列从2000年开始,另一个从2001年开始,如果不统一样本区间,软件可能只用到重叠部分,甚至报错。所以我的建议是在建模之前用tset命令把时间变量设置好,再用summary检查每个变量的样本范围。此外,如果变量量级差异太大,比如一个变量是几万亿美元,另一个是百分之几的增长率,建议取对数处理。对数化后,系数可以解释为弹性(也就是百分比变化之间的关系),而且能在一定程度上缓解异方差的干扰。

在Stata里准备数据的标准流程大概是这样的:

* 读取数据 use "macro_data.dta", clear * 设定时间序列结构,year为时间变量 tsset year * 生成对数变量 gen lngdp = ln(gdp) gen lnenergy = ln(energy) gen lnlabor = ln(labor) gen lncapital = ln(capital) * 检查样本范围 summarize lngdp lnenergy lnlabor lncapital

2.2 ADF与PP单位根检验:排除I(2)是关键一步

前面说了,ARDL不要求所有变量同阶单整,但必须排除I(2)。所以在正式建模之前,我一般会做两轮单位根检验:先对原序列做ADF检验和PP检验,再对一阶差分序列做同样的检验。如果某个变量原序列的检验p值大于0.05(不拒绝单位根原假设),一阶差分后p值小于0.05(拒绝单位根原假设),那它就是一阶单整I(1);如果原序列就已经拒绝单位根,那它就是I(0)。

有人可能会问:既然ARDL允许混搭,为什么还要做这个检验?原因很简单:一是为了排除I(2),二是为了检查是否有变量是I(0)却和一阶差分序列混在一起导致解释混乱。我见过有人直接把I(2)的变量放进ARDL,结果边界检验的F统计量高得离谱,长期系数符号也反直觉,最后才发现那个变量是二阶差分才平稳的。

ADF检验在Stata里的命令是dfuller,PP检验是pperron。比如:

* ADF检验:原序列 dfuller lngdp dfuller lnenergy * ADF检验:一阶差分 dfuller d.lngdp dfuller d.lnenergy * PP检验:原序列和一阶差分 pperron lngdp pperron d.lngdp

这里有个细节:dfuller和pperron默认都不含趋势项和常数项,但宏观经济序列往往有确定性趋势。我的建议是,先画时间趋势图,如果序列明显向上或向下走,ADF检验要选择带趋势项的选项,也就是dfuller lngdp, trend。如果你不加趋势项,一个明显有趋势的平稳序列可能被误判为有单位根,然后你为了“稳妥”把它差分掉,长期信息就白白损失了。

把单位根检验结果整理成一个表,放在论文或者报告里,是很多期刊的基本要求。我一般会做成三列:变量名、原序列检验p值、一阶差分检验p值,最后加一列“结论”。这一步别偷懒,后面所有解释都建立在“没有I(2)”这个前提上。


3. Stata里的完整操作流程(附案例)

3.1 安装ardl命令并准备数据

Stata有一个专门做ARDL估计和边界检验的外部命令,叫ardl,由Kripfganz和Schneider开发,可以在SSC上下载。安装命令很简单:

ssc install ardl

需要说明的是,ardl命令要求的Stata版本不能太老,我印象里Stata 13以上基本都支持。如果安装时报错,先去help ardl看一下依赖项是否齐全。

为了把流程讲透,我用一个简单的宏观经济案例来演示:研究能源消费对经济增长的影响。变量设定为:

  • lngdp:实际GDP的对数,被解释变量
  • lnenergy:能源消费总量的对数
  • lnlabor:劳动力人数的对数
  • lncapital:资本存量的对数

这是一个很经典的实证设定。资本和劳动是生产函数的基本投入,能源作为额外投入加入。样本用的是1990年到2022年的年度数据,共33个观察值,刚好属于ARDL比较擅长处理的小样本范畴。

数据准备完成后,用tsset声明时间结构,然后用ardl命令进行估计。先跑一个不考虑自动选滞后、手动设定各变量滞后阶数的版本:

* 手动指定:y滞后2阶,三个x都滞后1阶 ardl lngdp lnenergy lnlabor lncapital, lags(2 1 1 1) ecterm(ect)

其中ecterm(ect)会生成误差修正项变量ect,这个变量在后续误差修正模型里会用到,建议一开始就写上。

3.2 滞后阶数到底怎么选

滞后阶数选择是ARDL建模里最让人纠结的一步。选少了,残差可能残留自相关;选多了,自由度损耗严重,系数估计精度下降。常见的做法主要有两种。

第一种是手动指定。根据经济逻辑和样本频率,年度数据通常滞后1到2阶就够,季度数据可以放宽到4到8阶。手动指定有一个前提:估计完之后一定要做残差自相关检验。如果自相关还存在,就说明滞后阶数可能不够。

第二种是使用信息准则自动选择。ardl命令支持aic和bic选项,配合maxlags()指定最大滞后阶数,让软件在给定范围内自动选出信息准则最小的模型。比如:

* 自动选择:最多允许4阶滞后 ardl lngdp lnenergy lnlabor lncapital, maxlags(4) aic

这里有个坑需要注意:如果变量多、maxlags又大,自动搜索的组合数量会非常大,计算会比较慢,而且AIC和BIC选出来的结果常常不一致。AIC更倾向于选择较大的滞后阶数,因为它对参数惩罚比较轻,适合预测导向的模型;BIC惩罚更重,在小样本下更容易选出简约模型。我的经验是:如果AIC和BIC选出的滞后阶数不同,看样本量。样本量小(比如30左右)优先信BIC,样本量在80以上可以优先信AIC。选完之后,再用手动指定该阶数的模型跑一遍,同时做自相关检验确认残差是白噪声。

另外,如果你的核心解释变量只有一个,或者样本量有限,我建议不要对所有变量用同一滞后阶数。可以试几个组合,比如lags(1 2 2 1)和lags(2 1 1 2),比较一下信息准则和诊断检验结果。这种“人工网格搜索”配合信息准则,有时候比纯自动搜索更可靠,因为你知道每个变量各自的经济意义,比如政策变量的影响往往有较长时滞,滞后阶数可以适当放宽。

3.3 边界检验:判定长期协整关系是否存在

ARDL模型最关键的检验就是边界检验(Bounds Test)。检验的原假设是“不存在长期均衡关系”,具体到模型里就是θ1 = θ2 = ... = 0(所有水平滞后项系数联合为0)。Stata的ardl命令在估计结束后会直接输出边界检验的F统计量和对应临界值,不需要你手动算。

一个典型的输出会包含:

  • F统计量
  • 显著性水平(1%、5%、10%)对应的I(0)临界值和I(1)临界值
  • 可能还有一个t统计量检验

判断规则也很明确:如果F统计量大于I(1)临界值,拒绝原假设,说明存在长期关系;如果F统计量小于I(0)临界值,不能拒绝原假设,说明没有协整;如果F统计量落在两者之间,属于“不确定区间”,就需要参考t统计量,或者结合经济理论和后续的误差修正项显著性来做判断。

在我这个案例里,假设输出结果显示F统计量为6.82,5%显著性水平下I(0)临界值为3.23,I(1)临界值为4.35。因为6.82 > 4.35,所以拒绝“没有长期关系”的原假设,说明能源消费、劳动、资本与GDP之间存在长期均衡关系。这个结果对于研究能源与增长的关系来说,是一个挺关键的证据。

需要注意的是,边界检验的临界值会随模型设定变化而变化。你的模型里是否包含常数项、是否包含时间趋势项,都会影响临界值。Pesaran et al.(2001)把模型分成五种情形:无常数项无趋势、有常数项无趋势、有常数项有趋势、无常数项有趋势等等。在Stata的ardl命令中,你可以通过选项来控制是否加入趋势项。如果GDP这类变量有明显的随时间上升趋势,那在模型里加一个trend选项是合理的,临界值也会相应调整。不要无视趋势项就直接用默认临界值。

3.4 读取长期与短期系数、计算误差修正项

确认存在长期关系后,下一步就是解释长期和短期系数。Stata的ardl命令会直接报告长期系数(long-run coefficients),这一列通常有个醒目的小标题,下面列出每个解释变量对应的长期弹性。以我的案例来说,假设lnenergy的长期系数是0.43,含义是:长期来看,能源消费每增加1%,GDP平均增加0.43%。这就是你写论文时放在核心结果位置的那个数字。

短期动态关系则体现在差分项的系数上,反映的是变量在当期和前几期的变动对GDP增长的即时影响。这部分系数一般比较小,符合现实直觉——能源消费冲击对经济增长的影响本来就存在时滞,不可能当期全部到位。

误差修正项(ECM)是另一个关键输出。ecterm(ect)选项会创建变量ect,它的滞后一期系数(也就是误差修正速度)通常为负,界于-1和0之间。如果这个系数是-0.35,含义是:当GDP偏离长期均衡状态时,系统每年会以35%的速度向均衡回调整。这个值的经济学解释很直观——短期冲击会被逐渐消化,但不会立刻消失。你要检查这个系数的t统计量是否显著,如果误差修正项系数不显著,那说明即使边界检验通过,短期调整机制也可能存在问题,需要重新审视模型设定。

更进一步,如果你想把误差修正方程单独拿出来报告,可以基于ardl估计得到的变量自己构建ECM方程:

* 生成一阶差分变量 gen d_lngdp = d.lngdp gen d_lnenergy = d.lnenergy gen d_lnlabor = d.lnlabor gen d_lncapital = d.lncapital * 用滞后一期的误差修正项跑OLS regress d_lngdp d_lnenergy d_lnlabor d_lncapital L.ect

这里L.ect是误差修正项的一阶滞后,它的系数应该和ardl输出里的ECM系数一致或非常接近。单独跑一下的好处是,你可以很方便地保存残差,继续做后续的诊断检验,也可以把标准误和其他变量一起整理成规范的表格。


4. 模型诊断与稳定性检验

4.1 残差自相关、异方差和正态性检验

ARDL模型再好,如果残差不满足经典假设,系数的标准误和显著性判断都不可信。所以模型估计完成后,诊断测试是必须的一环,尤其是自相关检验。

自相关最直接的检验是BG(Breusch-Godfrey)拉格朗日乘数检验,在Stata里的命令是estat bgodfrey。滞后阶数一般选1到2阶:

* 自相关检验 estat bgodfrey, lags(1 2)

如果你的残差存在自相关,优先考虑增加滞后阶数,而不是直接换模型。还有一种情况是遗漏了重要解释变量,导致残差里有未被解释的结构性信息,这时候单纯加滞后解决不了问题,得回头改模型设定。

异方差检验常用的是Breusch-Pagan检验:

estat hettest

如果p值很小,说明存在异方差,稳健的做法是用稳健标准误重新估计,或者用ARDL命令中带robust选项的版本。不过要注意,在有限样本下,稳健标准误可能会让小样本推断变得更保守,需要结合样本量权衡。

正态性检验可以用sktest或者swilk:

sktest resid

Stata的ardl命令估计完成后,一般会保存残差变量。如果没保存,你可以用predict e, resid把残差提出来。注意,残差项的平稳性也可以顺带看一下,如果残差序列仍然有强烈的趋势或单位根特征,那说明模型设定有问题。

4.2 参数稳定性:CUSUM与CUSUMSQ

时间序列建模里,很多人忽略了一个问题:模型参数在整个样本期内是不是稳定的?如果1990年到2022年之间发生了明显的结构变化,比如政策调整、经济危机,那么用一个固定系数的模型解释全过程就很不合适。

ARDL框架下常用的稳定性检验是CUSUM(累积和控制图)和CUSUMSQ(累积平方和控制图)。这两个检验的基本思想是:利用递归残差或累积残差,判断模型系数是否存在系统性漂移。通常CUSUM图关注系数的均值漂移,CUSUMSQ图关注系数的方差漂移。如果累积和曲线始终位于5%显著性水平的边界线以内,就说明参数是稳定的。

在Stata里,我一般用cusum6这个外部命令,安装方式同样是ssc install cusum6,然后:

cusum6 lngdp lnenergy lnlabor lncapital

它会同时画出CUSUM和CUSUMSQ图。如果你的Stata版本不支持,也可以先估计模型、保存残差,再手工作图。这里有一个容易被忽视的细节:CUSUM检验对样本顺序很敏感,所以你在跑之前务必确认tsset的时间顺序是正确的,不然画出来的图毫无意义。

如果CUSUM图明显出界,说明模型可能存在结构性断点。解决思路有两个:一是加入虚拟变量或时间趋势项重新估计;二是把样本分段。不过分段后样本量又会减少,所以很多时候更实际的选择是在模型里加入结构突变虚拟变量,再重新做边界检验。


5. 常见问题与排查技巧实录

5.1 高频问题和解决办法速查

我把自己实际使用中遇到的坑,以及身边朋友问过最多的问题整理成一张速查表,方便你直接对照排查。

问题现象可能原因解决办法
ssc install ardl报错Stata版本过旧或网络问题升级Stata到13以上,重新安装
边界检验F值落在I(0)和I(1)之间不确定区间,样本量不足或滞后结构不当参考t统计量,或者调整滞后阶数后再试
误差修正项系数不显著长期关系微弱或模型遗漏关键变量重新审视变量集合,检查是否存在遗漏变量
残差存在自相关滞后阶数不够将滞后阶数加1到2阶,重新估计
加入trend项后结果完全变了时间趋势与经济变量之间共线性强对比有无趋势项的结果,依据经济逻辑选择
自动选滞后时AIC和BIC给不同阶数信息准则惩罚机制不同小样本优先BIC,大样本优先AIC
某个变量的系数符号与经济理论相反可能有多重共线性或变量遗漏计算VIF,检查变量间的相关性,必要时剔除变量
数据频率是月度但手动设lags(1)滞后阶数与数据频率不匹配月度数据试6或12阶,季度数据试4阶

5.2 我踩过的坑和几点实用建议

第一个坑:没做单位根检验就直接跑ARDL,结果边界检验F值大得离谱。后来才发现有个变量是I(2)过程,价格指数类的变量尤其常见。所以哪怕ARDL对I(0)、I(1)混搭很宽容,也一定要先跑dfuller和pperron。如果你发现某个变量的一阶差分仍然不是平稳的,宁可换指标也别硬塞进去。

第二个坑:自动选滞后阶数的时候,直接用了maxlags(8),结果电脑跑了十分钟还没停下来。后来明白过来,变量有四个、最大滞后八阶,组合数量是指数级增长,如果还想让软件搜索每个变量的不同滞后,计算量非常可观。现在我的习惯是先看样本量和数据频率,年度数据最多设maxlags(4),季度数据最多设maxlags(8),并且不会同时让四五个变量全部参与自由搜索。

第三个坑:在分析结果时,只报了长期系数,忽略了短期动态和误差修正项。实际上很多期刊审稿人会特别在意误差修正速度,因为它能反映经济系统自我修复的能力。尤其当你研究政策冲击、能源价格变动这类问题时,ECT系数的大小直接决定了政策效应的持续性。我建议在最终报告里至少给出以下信息:滞后结构、边界检验F统计量、长期系数、短期系数、ECT项系数及其显著性、残差诊断结果、CUSUM稳定性图。

最后再分享一个小技巧:在写论文或报告时,尽量把ARDL的完整设定写清楚,比如“ARDL(2,1,1,1)”这类表示方法。审稿人看到清晰的模型设定,往往就不会追着你问为什么不用VECM。至于边界检验临界值表,可以引用Pesaran et al.(2001)的原文,也可以直接报告Stata输出的临界值。


我个人在实际操作中的体会是,ARDL更像是一个聪明的折中方案:它保留了误差修正模型对长期均衡的重视,又避免了传统协整方法对单整阶数的严苛要求。只要你的数据里没有I(2),样本量又不是特别小,那ARDL几乎总能给出一个逻辑自洽、容易解释的结果。把这个模型用透,应对宏观经济、金融、能源环境等大多数时间序列研究都够用了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询