【问题标题】:Hierarchical Time Series分层时间序列
【发布时间】:2016-01-08 19:28:47
【问题描述】:

我使用 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 模型相同完整的数据集(我假设 fmethod="arima" 使用 auto.arima)。我希望它们保持相同的模型,否则我的样本外准确性度量评估的模型与我用于最终预测的模型不同。

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

任何关于哪种 R 代码会有所帮助的建议将不胜感激。

【问题讨论】:

    标签: r forecasting


    【解决方案1】:

    这些功能并未设置为执行此操作。但是,做自己想做的事情并不太难。这是一些示例代码

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-05-21
      • 2018-03-23
      • 2021-12-04
      • 2021-01-06
      • 2021-03-24
      • 2017-10-14
      • 2017-12-31
      • 2012-04-02
      • 2018-01-16
      相关资源
      最近更新 更多