我在R中也运行了dynlm回归。
我对确定最佳时滞的循环有疑问?
我想知道,对于某个变量,哪个时间滞后是最佳的 - 其他条件不变。
有没有办法绘制它或我应该如何工作?
dynlm(y~a + b + c + L(d,y))
我想知道哪个时滞是最重要的?
答案 0 :(得分:1)
就个人而言,我可能会手动设置带有滞后变量的data.frame
,然后使用您感觉舒服的变量选择方法,例如,通过step()
逐步选择,所有子集回归,例如通过leaps
或lasso等人。通过glmnet
等
作为基于Nile
时间序列的简单示例:
d <- as.data.frame(ts.intersect(
y = Nile,
y1 = lag(Nile, -1),
y2 = lag(Nile, -2),
y3 = lag(Nile, -3),
y4 = lag(Nile, -4),
y5 = lag(Nile, -5)
))
m <- lm(y ~ y1 + y2 + y3 + y4 + y4 + y5, data = d)
m2 <- step(m)
coef(m2)
## (Intercept) y1 y2
## 381.8464340 0.3923535 0.1835561
这种逐步的基于AIC的选择也可以通过dynlm
完成,但您需要注意所有模型都适合相同的数据子集。 (在上面的方法中ts.intersect
确保使用没有NA
的正确子集。)
dm <- dynlm(Nile ~ L(Nile, 1) + L(Nile, 2) + L(Nile, 3) + L(Nile, 4) + L(Nile, 5),
start = 1876)
dm2 <- step(dm)
coef(dm2)
(Intercept) L(Nile, 1) L(Nile, 2)
381.8464340 0.3923535 0.1835561
前一种方法的优点是它可以真正用于非动态线性回归所用的所有内容。后者也适用于step()
,但也许不适用于其他人。 (请注意,我并不特别赞同基于AIC的逐步选择......)
答案 1 :(得分:1)
我会使用来自预测包的auto.arima(),这比dynlm更适合这个目的。 auto.arima()根据各种标准(AICC,AIC或BIC)选择最佳模型。它可以逐步或全面使用。如果数据不是季节性的,请使用季节性= F选项。在你的情况下运行所有案例,最多可以使用10:你可以使用:
require(forecast)
# maximum lag allowed
maxlag <- 10
#Converts formula to matrix
mm <- model.matrix(~a+b+c-1, data=mydata)
y <- as.ts(mydata$y)
fit <- auto.arima(y, xreg=mm, d=0,max.p=maxlag, max.order=maxlag,max.q=0,
seasonal=FALSE,trace=TRUE, stepwise =FALSE)
print(fit)