"object not found" 使用拟合的 "tslm" 模型进行预测时出错

"object not found" error when making forecast with a fitted "tslm" model

我正在尝试为我的时间序列实施留一法交叉验证,但遇到了预测错误。

library('forecast')

data_aero <- c(579, 624, 651, 687,  745,  753,  844,  965, 1076, 1078, 1107)
data_railway <-c(1417, 1507, 1696, 1831, 1985, 1506, 1854, 2059, 2104, 1932, 1778)


data.ts <- ts(data=data.frame(aero = data_aero, railway = data_railway),  start = 2004)

st <- 2003
limit <- 2013
en <- 2014

data.ts.train <- window(data.ts, start=st, end=limit)
data.ts.test  <- window(data.ts, start=limit+1, end=en)


m <- tslm(aero~railway, data=data.ts.train)

到这里一切都很好,但如果我这样做了

forecast(m, h=1)

我收到一个错误

Error in eval(expr, envir, enclos) : object 'railway' not found

你也需要指定railway:

forecast(m, h = 1, newdata = data.frame(railway = 1))
#     Point Forecast     Lo 80    Hi 80     Lo 95    Hi 95
#2014      -244.3887 -690.9415 202.1641 -981.6033 492.8259

如果您进行 k 步预测,您需要为所有协变量指定 k 个新值。在上面,我以 railway = 1 为例。

注意,forecast 是一个通用函数,有很多方法:

methods(forecast)
# [1] forecast.ar          forecast.Arima       forecast.bats       
# [4] forecast.default*    forecast.ets         forecast.forecast*  
# [7] forecast.fracdiff    forecast.HoltWinters forecast.lm         
#[10] forecast.mlm*        forecast.mts*        forecast.nnetar     
#[13] forecast.stl         forecast.stlm        forecast.StructTS   
#[16] forecast.tbats       forecast.ts*         forecast.varest*

如果你适合 "tslm",你有:

class(m)
# [1] "lm"

因此,forecast.lm被调用。看起来您对 forecast.Arima 相当上瘾,其中只需要设置 h。阅读 ?forecast.lm.