我使用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代码有用的任何建议都会非常感激。
答案 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)