我对 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/