能否用dynlm复现ARDL包的UECM模型?结果差异解析
ARDL包UECM模型与dynlm复现问题解答
问题背景
用户通过ARDL包构建最优ARDL模型并提取UECM模型,代码如下:
library(ARDL) ardl_test <- auto_ardl(logKINBU ~ SBIV+logGCSM+logDKTOT, data = KINBU_tn, max_order = c(3,3,3,3)) ard11 <- ardl_test$best_model ue.ardl1 <- uecm(ard11) summary(ue.ardl1)
该UECM模型的结果显示:L(logKINBU,1)系数为-0.141840,Multiple R-squared为0.5268。
但用户用dynlm构建的模型结果差异极大,代码如下:
ardl_model = dynlm::dynlm(formula = logKINBU ~ L(logKINBU, 1)+SBIV+logGCSM+logDKTOT, data = KINBU_tn) summary(ardl_model)
结果为:L(logKINBU,1)系数为0.858160,Multiple R-squared高达0.9973,仅残差一致。
用户核心疑问:
- 代码存在什么问题?
- 能否用dynlm复现UECM?
- 该dynlm模型是否存在伪回归问题?
- 能否像ECM一样,用dynlm对多个非平稳变量建模?
核心原因与解决方案
1. 代码问题:未匹配UECM的误差修正形式
你用dynlm编写的模型是水平形式的滞后回归,和ARDL包输出的UECM(误差修正模型)结构完全不同:
- UECM的因变量是因变量的一阶差分,而非原水平变量;
- UECM包含自变量的差分项(对应短期动态)和误差修正项/长期水平项(对应长期均衡关系);
- 你当前的dynlm模型直接用原水平变量回归,拟合的是变量水平值的自回归加同期自变量,自然结果差异巨大。
2. 用dynlm复现UECM的方法
要复现ARDL包的UECM,需要先明确UECM的具体公式,再对应构建dynlm模型:
步骤1:查看UECM的完整公式
运行以下命令获取ARDL包输出的UECM结构:
ue.ardl1
输出会显示类似如下的完整公式(具体取决于最优ARDL阶数):d(logKINBU) ~ d(SBIV) + d(logGCSM) + d(logDKTOT) + L(logKINBU,1) + L(SBIV,1) + L(logGCSM,1) + L(logDKTOT,1)
步骤2:用dynlm匹配该公式
将上述公式直接代入dynlm:
library(dynlm) uecm_dynlm <- dynlm( formula = d(logKINBU) ~ d(SBIV) + d(logGCSM) + d(logDKTOT) + L(logKINBU,1) + L(SBIV,1) + L(logGCSM,1) + L(logDKTOT,1), data = KINBU_tn ) summary(uecm_dynlm)
此时的结果会和summary(ue.ardl1)完全一致。
替代方法:手动使用误差修正项
也可以提取ARDL模型的长期均衡残差(即误差修正项),手动构建UECM:
# 提取ARDL模型的残差作为误差修正项 ec_term <- residuals(ard11) # 构建UECM模型 uecm_dynlm2 <- dynlm( formula = d(logKINBU) ~ d(SBIV) + d(logGCSM) + d(logDKTOT) + L(ec_term), data = KINBU_tn ) summary(uecm_dynlm2)
这种方式也能得到和ARDL包UECM一致的核心统计结果。
3. 关于伪回归问题
你当前的dynlm水平模型确实存在伪回归风险:
- 如果变量是I(1)非平稳且不存在协整关系,水平回归的高R²是虚假的,t统计量也不具备统计意义;
- 而UECM模型通过差分处理非平稳性,同时保留了长期协整信息,有效避免了伪回归问题。
4. dynlm对多个非平稳变量建模的可行性
可以,但必须遵循协整框架:
- 若变量之间存在协整关系,可通过ECM/UECM形式建模(即差分变量加误差修正项),此时模型的统计推断是有效的;
- 若变量无协整关系,直接对水平非平稳变量回归会导致伪回归,此时只能对差分后的平稳变量建模,但会丢失长期关系信息。
内容的提问来源于stack exchange,提问作者user25375480
相关产品推荐
相关产品推荐

