r - 如何使用r中的for循环使用先前的观察来预测下一个时期?

标签 r for-loop time-series rstudio

我对 xt = γ1xt−1 + γ2xt−2 + εt [AR(2)] 进行了 1000 次观测。 我想做的是使用前 900 个观测值来估计模型,并使用剩余的 100 个观测值来预测一步。 这是我到目前为止所做的:

    data2=arima.sim(n=1000, list(ar=c(0.5, -0.7)))  #1000 observations simulated, (AR (2))
    arima(data2, order = c(2,0,0), method= "ML")  #estimated parameters of the model with ML
    fit2<-arima(data2[1:900], c(2,0,0), method="ML")  #first 900 observations used to estimate     the model
    predict(fit2, 100)

但是我的代码现在的问题是 n.ahead=100 但我想使用 n.ahead=1 并总共进行 100 个预测。 我认为我需要为此使用 for 循环,但由于我是 Rstudio 的新用户,我无法弄清楚如何使用 for 循环进行预测。谁能帮我这个?

最佳答案

如果我理解正确的话,您希望对测试集进行一步预测。这应该可以在没有循环的情况下完成您想要的操作:

library(forecast)
data2 <- arima.sim(n=1000, list(ar=c(0.5, -0.7)))
fit2 <- Arima(data2[1:900], c(2,0,0), method="ML")
fit2a <- Arima(data2[901:1000], model=fit2)
fc <- fitted(fit2a)

Arima命令允许将模型应用于新的数据集,而无需重新估计参数。然后fitted给出一步样本内预测。

如果您想对测试数据进行多步预测,则需要使用循环。以下是提前两步预测的示例:

fcloop <- numeric(100)
h <- 2
for(i in 1:100)
{
  fit2a <- Arima(data2[1:(899+i)], model=fit2)
  fcloop[i] <- forecast(fit2a, h=h)$mean[h]
}

如果您设置 h <- 1上面你会得到与使用 fitted 几乎相同的结果在上一个代码块中。前两个值会有所不同,因为使用 fitted 的方法不考虑训练集末尾的数据,而使用循环的方法在进行预测时会使用训练集末尾的数据。

关于r - 如何使用r中的for循环使用先前的观察来预测下一个时期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24277055/

相关文章:

linux - 在 R studio 中使用标准输入

python - 转换为 FEATHER 文件会创建巨大的文件

c++ - 从 for 循环崩溃的 vector 中删除?

r - 如何创建从特定日期开始的每日时间序列

python-2.7 - 根据不规则的时间间隔合并 Pandas 数据帧

r - 融化数据框和拆分值

python - 检测折线图分段的正确算法是什么?

javascript - 我可以对此使用更高的功能吗?

c# - 请求解释此 C# armstrong 数字检查器中应用的 for 循环逻辑

读取带/不带空格和数字的混合文本的不规则格式文本文件