【发布时间】:2016-12-19 21:24:02
【问题描述】:
假设我有以下循环计算滚动预测并使用 ARMA 模型重新拟合模型。
library(forecast)
set.seed(1)
prices=rnorm(1963)
USDlogreturns=diff(log(prices))
h <- 1
train <- window(USDlogreturns, end=1162, frequency=1)
test <- window(USDlogreturns, start=1163, frequency=1)
n <- length(test) - h + 1
fc1 <- ts(numeric(n), start=1163+1, freq=1)
fc2 <- ts(numeric(n), start=1163+1, freq=1)
fc3 <- ts(numeric(n), start=1163+1, freq=1)
fc4 <- ts(numeric(n), start=1163+1, freq=1)
fit1 <- Arima(train, order=c(0,0,0), include.mean=TRUE, method="ML")
fit2 <- Arima(train, order=c(0,0,1), include.mean=TRUE, method="ML")
fit3 <- Arima(train, order=c(1,0,0), include.mean=TRUE, method="ML")
fit4 <- Arima(train, order=c(1,0,1), include.mean=TRUE, method="ML")
for(i in 1:n){
x <- window(USDlogreturns, end=1162 + i, frequency=100)
refit1 <- Arima(x, model=fit1, include.mean=TRUE, method="ML")
refit2 <- Arima(x, model=fit2, include.mean=TRUE, method="ML")
refit3 <- Arima(x, model=fit3, include.mean=TRUE, method="ML")
refit4 <- Arima(x, model=fit4, include.mean=TRUE, method="ML")
fc1[i] <- forecast(refit1, h=h)$mean[h]
fc2[i] <- forecast(refit2, h=h)$mean[h]
fc3[i] <- forecast(refit3, h=h)$mean[h]
fc4[i] <- forecast(refit4, h=h)$mean[h]
}
当我在 R 中运行它时,我收到了 50 条警告消息:
"在window.default(USDlogreturns, end = 1162 + i, frequency = 100):'频率'没有改变"
所以我的问题是我很难理解如何告诉 R 通过窗口函数每 100 天改装我的四个 ARMA 模型,共 8 次。
对新手有什么建议吗?
【问题讨论】:
-
在对
window的调用中,你想用frequency做什么?看起来您正在尝试控制窗口的宽度,但frequency并未用于此目的。用于指定时间序列的周期性,frequency = 1表示年度数据。 -
是的,我的问题是想要生成提前 1 天的预测,每 100 天进行一次模型调整,但不知道如何通过命令窗口来判断。
-
我想你会想在对
lapply或sapply的调用中编写一个函数,并使用样本断点向量(例如seq(0, 800, 100))作为Xin那个电话。尝试为该过程的第一次和第二次迭代编写代码,然后将您为第二次更改的位转换为函数中的变量。
标签: r forecasting