2016-11-23 188 views
1

我正在尝试为我的时间序列实施leave-one-out交叉验证,但是却发现了预测错误。使用合适的“tslm”模型进行预测时出现“object not found”错误

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 

回答

3

你需要指定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 s tep提前预测,您需要为所有协变量指定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

+0

令人印象深刻。谁能想到。 是的。我试过很多模型,arima就是其中之一:-) 虽然问题是:铁路= 1意味着铁路也需要预测,或者它意味着铁路正在采用值“1”预测变量? – arthur

相关问题