我正在尝试使用预测功能的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"
如何在此进行预测?
2条答案
按热度按时间dz6r00yl1#
当我尝试在一个ardl模型上使用predict()时,我也遇到了这个错误。
L函数在tsDyn中,我想,但加载那并不能消 debugging 误。
sauutmhj2#
AFAIK,在ARDL模型的“核心”通常是简单的线性回归(除非它被指定为dynlm的动态模型),所以...我最好的尝试是尝试使用不同的包/函数来构建ARDL模型。它需要更多的编写,但应该会给予你一个可行的模型对象,然后你可以使用它来构建你的预测/预报。
因此,我要做的是使用ARDL包来估计ARDL模型,就像您在上面的示例中所做的那样,从模型对象中提取完整的公式,并使用其语法在lm()公式中重写它,如下所示:
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()模型中指定上面的公式:
您可以使用
predict.lm()
函数使用线性指定的ARDL模型创建预测:与使用lm()或glm()相比,ARDL包本身对于更方便地估计模型非常有用。请参阅对模型对象的summary()调用以探索其属性。
然而,将其与
lm()
指定的模型摘要进行比较表明,它们并不相同。其原因是此特定示例的函数
ARDL::auto_ardl()
选择了指定动态线性模型和时间序列回归而不是线性模型的dynlm::dynlm(formula = full_formula, data = data, start = start, end = end)
。要从dynlm模型创建预测,您需要使用
stats::predict()
,如下所示:将
dynlm
预测值与线性模型预测值进行比较,我们可以看到,预测是不同的。
更新:也许更好的选择是使用另一个特定于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)