使用ARDL R包中的模型对象进行预测

fnatzsnv  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(329)

我正在尝试使用预测功能的ardl模型,就像这样。

library(ARDL)
data(denmark)

models <- auto_ardl(LRM ~ LRY + IBO + IDE, data = denmark, max_order = 5)
ardl_3132 <- models$best_model

fabletools::forecast(object = ardl_3132, new_data = denmark[1:20, ])
forecast::forecast(object = ardl_3132, new_data = denmark[1:20, ])

但是,它会抛出错误Error in L(LRM, 1) : could not find function "L"
如何在此进行预测?

dz6r00yl

dz6r00yl1#

当我尝试在一个ardl模型上使用predict()时,我也遇到了这个错误。
L函数在tsDyn中,我想,但加载那并不能消 debugging 误。

sauutmhj

sauutmhj2#

AFAIK,在ARDL模型的“核心”通常是简单的线性回归(除非它被指定为dynlm的动态模型),所以...我最好的尝试是尝试使用不同的包/函数来构建ARDL模型。它需要更多的编写,但应该会给予你一个可行的模型对象,然后你可以使用它来构建你的预测/预报。
因此,我要做的是使用ARDL包来估计ARDL模型,就像您在上面的示例中所做的那样,从模型对象中提取完整的公式,并使用其语法在lm()公式中重写它,如下所示:

> ardl_3132$full_formula

LRM ~ L(LRM, 1) + L(LRM, 2) + L(LRM, 3) + LRY + L(LRY, 1) + IBO + L(IBO, 1) + L(IBO, 2) + L(IBO, 3) + IDE + L(IDE, 1) + L(IDE, 2)
我们可以在一个lm()模型中指定上面的公式:

ardl_3132_lm <- lm(LRM ~ lag(LRM, 1) + lag(LRM, 2) + lag(LRM, 3) + LRY + lag(LRY, 1) + IBO + lag(IBO, 1) + lag(IBO, 2) + lag(IBO, 3) + IDE + lag(IDE, 1) + lag(IDE, 2), data = denmark)

您可以使用predict.lm()函数使用线性指定的ARDL模型创建预测:

predict.lm(ardl_3132_lm)

与使用lm()或glm()相比,ARDL包本身对于更方便地估计模型非常有用。请参阅对模型对象的summary()调用以探索其属性。

summary(ardl_3132)

然而,将其与lm()指定的模型摘要进行比较表明,它们并不相同。

summary(ardl_3132_lm)

其原因是此特定示例的函数ARDL::auto_ardl()选择了指定动态线性模型和时间序列回归而不是线性模型的dynlm::dynlm(formula = full_formula, data = data, start = start, end = end)
要从dynlm模型创建预测,您需要使用stats::predict(),如下所示:

stats::predict(ardl_3132, 1)

dynlm预测值与线性模型预测值进行比较,

stats::predict(ardl_3132_lm)

我们可以看到,预测是不同的。
更新:也许更好的选择是使用另一个特定于ARDL的包,而不是简单的lm()或glm()函数。
所以,现在我将使用一个不同的包 dyn,它使用了一个有点奇怪的语法:
library(dyn)
dyn_model_1 <- dyn::dyn$lm(LRM ~ stats::lag(LRM, -1) + stats::lag(LRM, -2) + stats::lag(LRM, -3) + LRY + stats::lag(LRY, -1) + IBO + stats::lag(IBO, -1) + stats::lag(IBO, -2) + stats::lag(IBO, -3) + IDE + stats::lag(IDE, -1) + stats::lag(IDE, -2), data = denmark)
打印指定模型的摘要:
summary(dyn_model_1)
观察模型拟合值:
plot(dyn_model_1$fitted.values)
使用指定的模型向前预测n步:
n <- 2 #指定要预测的前进步数
prediction <- predict(dyn_model_1, n) #预测n超前步骤
plot(prediction) #绘制预测值

重要提示:如果方程中有时间t=0的非滞后变量,则无法预测周期t+i的y。此外,如果要进行t=2预测,则应确保同时从方程中删除t-1滞后变量。
一般规则:在指定模型的方程中,你不能预测比自变量滞后更早的变量。

因此,在这种情况下,提前2步的预测将不起作用,因为模型方程中仍有t=0和t=-1的变量。要进行预测,我们首先必须从方程中删除这些(欠滞后)变量。为了能够提前2步进行预测,我必须重新指定模型如下:
dyn_model_2 <- dyn::dyn$lm(LRM ~ stats::lag(LRM, -2) + stats::lag(LRM, -3) + stats::lag(IBO, -2) + stats::lag(IBO, -3) + stats::lag(IDE, -2), data = denmark)
prediction <- predict(dyn_model_2, n)
plot(prediction)

相关问题