You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中对VAR模型执行BG检验时出现错误求助

解决VAR模型残差BG检验报错问题

问题根源

lmtest包的bgtest函数默认需要接收回归模型对象或带明确公式的输入,直接传入VAR模型的残差数据框会因缺少模型的terms属性而报错。另外,VAR是多方程模型,需要针对每个方程的残差分别处理。

解决方案1:使用vars包自带的序列相关检验函数(推荐)

vars包提供了serial.test函数,专门用于VAR模型的序列相关检验,无需手动处理残差:

library(vars)
library(lmtest)

# 原VAR模型代码不变
v1 <- data.frame(PRG, VYS, r, GDP)
lag_order <- VARselect(v1, lag = 2, type = "const")$selection[1]
model <- VAR(v1, p = lag_order, type = "const")

# 直接对VAR模型执行BG检验
serial_test_result <- serial.test(model, lags.pt = lag_order, type = "BG")
print(serial_test_result)

解决方案2:手动对每个方程残差执行BG检验

如果一定要用bgtest,需要为每个残差序列构造回归模型(残差对自身滞后项回归):

# 提取VAR模型残差
res <- residuals(model)

# 遍历每个残差序列,逐一执行BG检验
bg_results <- lapply(colnames(res), function(var_name) {
  # 生成残差的滞后项
  lagged_residuals <- embed(res[[var_name]], lag_order + 1)[, -1]
  # 拟合残差与滞后项的回归模型
  lm_fit <- lm(res[[var_name]][-(1:lag_order)] ~ ., data = data.frame(lagged_residuals))
  # 执行BG检验
  bgtest(lm_fit, order = lag_order)
})

# 为结果命名,方便查看
names(bg_results) <- colnames(res)
# 输出所有检验结果
lapply(bg_results, print)

内容的提问来源于stack exchange,提问作者Filip Emmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:19:59