我在插入符号的timeslice
函数中使用trainControl
方法对时间序列模型执行交叉验证。我注意到,随着horizon
参数的增加,RMSE也会增加。
我意识到,这可能由于多种原因而发生,例如,如果正在预测解释变量和/或数据中存在自相关,则该模型可以更好地预测较近或较远的观测值。但是,即使情况并非如此,我仍然看到相同的行为(请参见下面的可重现的小示例)。
有人能解释为什么RSME随着horizon
的增长而增长吗?
# Make data
X = data.frame(matrix(rnorm(1000 * 3), ncol = 3))
X$y = rowSums(X) + rnorm(nrow(X))
# Iterate over different different forecast horizons and record RMSES
library(caret)
forecast_horizons = c(1, 3, 10, 50, 100)
rmses = numeric(length(forecast_horizons))
for (i in 1:length(forecast_horizons)) {
ctrl = trainControl(method = 'timeslice', initialWindow = 500, horizon = forecast_horizons[i], fixedWindow = T)
rmses[i] = train(y ~ ., data = X, method = 'lm', trControl = ctrl)$results$RMSE
}
print(rmses) #0.7859786 0.9132649 0.9720110 0.9837384 0.9849005