我对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循环来进行预测。谁能帮我这个?
答案 0 :(得分:2)
如果我理解正确,您需要对测试集进行一步预测。这应该做你想要的没有循环:
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
的方法没有考虑训练集末尾的数据,而使用循环的方法在进行预测时使用训练集的结束。 / p>