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

动态回归中lag参数选择及dyn$lm适用性技术咨询

问题解答

1. 关于lag函数的选择:lag(x,1)是正确的

在R的时间序列体系中,lag(x, k)参数k为正整数时,代表取序列的滞后k期值——也就是对于当前周t,lag(x,1)对应的是前一周t-1的x值,完全匹配你用前一周指标预测当前周BTC收益的需求。

而lag(x,-1)是取超前1期值(t+1周),这是未来数据,显然不是你要的方向。你代码里的lag(x,1)用法没问题。

你可以简单验证:

# 查看BTC_Ret和其滞后1期的对齐情况
head(cbind(BTC_Ret = your_data[,1], BTC_Ret_lag1 = lag(your_data[,1],1)))

输出里第一行的滞后值为NA,第二行的滞后值是第一行的BTC_Ret,正好对应前一周的数据。

2. dyn$lm的适用性及替代方案

(1)dyn$lm完全适用

dyn包的dyn$lm就是为带滞后项的时间序列回归设计的,它会自动处理时间序列的对齐,无需手动删除缺失值或调整序列长度,对你的动态回归模型(含滞后自变量和滞后因变量)来说是高效的工具。

(2)其他可选方法

  • 手动构建滞后变量+基础lm:如果你不想依赖dyn包,手动生成滞后项后用普通lm拟合也可以,结果一致:
# 转换为数据框
df <- as.data.frame(your_data)
# 生成滞后1期变量
df$PSVI_lag1 <- c(NA, df$PSVI[-nrow(df)])
df$NSVI_lag1 <- c(NA, df$NSVI[-nrow(df)])
df$BTC_Ret_lag1 <- c(NA, df$BTC_Ret[-nrow(df)])
# 删去缺失值行
df_clean <- na.omit(df)
# 拟合模型
model_lm <- lm(BTC_Ret ~ PSVI_lag1 + NSVI_lag1 + BTC_Ret_lag1, data = df_clean)
summary(model_lm)
  • fable包(tidy时间序列框架):如果你习惯tidyverse风格,fable包提供更优雅的时间序列建模体验,还支持残差分析、预测等功能:
library(fable)
library(tsibble)
# 转换为tsibble格式
tb <- as_tsibble(your_data)
# 拟合带外部回归项的模型
model_fable <- tb %>%
  model(ARIMA(BTC_Ret ~ 1 + lag(PSVI,1) + lag(NSVI,1) + lag(BTC_Ret,1)))
# 查看结果
report(model_fable)
  • 稳健标准误差修正:由于模型包含滞后因变量,残差可能存在自相关,普通OLS标准误差可能偏误。可以用sandwich包计算Newey-West稳健标准误差:
library(sandwich)
library(lmtest)
# 对dyn$lm的结果修正标准误差
coeftest(test1, vcov = NeweyWest(test1))

额外建议

拟合模型后,记得检查残差的自相关性(acf(residuals(test1))),如果存在显著自相关,可能需要增加更多滞后项,或考虑ARMA类模型结合外部变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 06:36:32