分层时间序列

时间:2015-10-11 06:14:09

标签: r forecasting

我使用R中的hts包来拟合火车数据的HTS模型,使用" arima"预测和计算保持/测试数据的准确性的选项。 这是我的代码:

library(hts)
data<-read.csv("C:/TS.csv")
ts_train <- ts(data[,-1],frequency=12, start=c(2000,1))
hts_train <- hts(ts_train, nodes=list(2, c(4, 2)))
data.test<-read.csv("C:/TStest.csv")
ts_test <- ts(data.test[,-1],frequency=12, start=c(2003,1))
hts_test <- hts(ts_test, nodes=list(2, c(4, 2)))
forecast <- forecast(hts_train, h=15, method="bu", fmethod="arima", keep.fitted = TRUE, keep.resid = TRUE)
accuracy<-accuracy.gts(forecast, hts_test)

现在,让我们对保留样本的准确性感到满意,并且我想将测试数据与火车数据混在一起并使用全套重新预测。

我尝试使用此代码:

data.full<-read.csv("C:/TS_full.csv")
ts_full <- ts(data.full[,-1],frequency=12, start=c(2000,1))
hts_full <- hts(ts_full, nodes=list(2, c(4, 2)))
forecast.full <- forecast(hts_full, h=15, method="bu", fmethod="arima", keep.fitted = TRUE, keep.resid = TRUE)

现在,我不确定这是否是正确的方法,因为我不知道用于估算我的列车数据的ARIMA模型是否与我所用的ARIMA模型相同; m现在用来预测完整的数据集(我假设fmethod =&#34; arima&#34;利用auto.arima)。我希望它们保持相同的模型,否则我的样本精度测量值评估的模型与我用于最终预测的模型不同。

我看到有一个FUN参数表示&#34;一个用户定义的函数,它返回一个可以传递给预测函数的对象&#34;。也许这个参数可以在我的代码的最后一行以某种方式使用,以确保我适合列车数据的模型用于预测完整的数据集?

对于什么样的R代码有用的任何建议都会非常感激。

1 个答案:

答案 0 :(得分:3)

这些功能没有设置。但是,做你想做的事情并不困难。这是一些示例代码

library(hts)
data <- htseg2

# Split data into training and test sets
hts_train <- window(data, end=2004)
hts_test <- window(data, start=2005)

# Fit models and compute forecasts on all nodes using training data
train <- aggts(hts_train)
fmodels <- list()
fc <- matrix(0, ncol=ncol(train), nrow=3)
for(i in 1:ncol(train))
{
  fmodels[[i]] <- auto.arima(train[,i])
  fc[,i] <- forecast(fmodels[[i]],h=3)$mean
}
forecast <- combinef(fc, nodes=data$nodes)
accuracy <- accuracy.gts(forecast, hts_test)

# Forecast on full data set without re-estimating parameters
full <- aggts(data)
fcfull <- matrix(0, ncol=ncol(full), nrow=15)
for(i in 1:ncol(full))
{
  fcfull[,i] <- forecast(Arima(full[,i], model=fmodels[[i]]),
                         h=15)$mean
}
forecast.full <- combinef(fcfull, nodes=data$nodes)

# Forecast on full data set with same models but re-estimated parameters
full <- aggts(data)
fcfull <- matrix(0, ncol=ncol(full), nrow=15)
for(i in 1:ncol(full))
{
  fcfull[,i] <- forecast(Arima(full[,i], 
                       order=fmodels[[i]]$arma[c(1,6,2)],
                       seasonal=fmodels[[i]]$arma[c(3,7,4)]),
                       h=15)$mean
}
forecast.full <- combinef(fcfull, nodes=data$nodes)