重复的预测给出相同的值

时间:2018-07-11 11:25:06

标签: r time-series

我有一个公司的不同部门的绩效月度数据集(以百分比表示)

   Date    |Sector  |Value
2016-01-01 |Sect 1  |-20
2016-02-01 |Sect 1  |10
2016-01-01 |Sect 2  |23
2016-02-01 |Sect 1  |10 

数据截止到2018年6月,共有20个行业和每月数据。现在,我要预测下个月的价值。我使用了以下代码:

combine_ts <- function(data, h=1, frequency= 12, start= c(2016,5), 
end=c(2018,6)) 
{
  results <- list()
  sectgrowthsub <- data[!duplicated(sectgrowthdf2[,2]),]
  sectgrowthts <- ts(sectgrowthsub[,3], frequency = frequency, start = start, 
  end = end)


  for (i in 1:(nrow(sectgrowthsub))) {    
  results[[i]] <- data.frame(Date = 
  format(as.Date(time(forecast(auto.arima(sectgrowthts), h)$mean)), "%b-%y"),
                         SectorName = rep(sectgrowthsub[,2], h),
                         PointEstimate = forecast(auto.arima(sectgrowthts), 
                         h=h)$mean[i])

    }

return(data.table::rbindlist(results)) 
}
fore <- combine_ts(sectgrowthsub) 

在这种情况下,问题在于所有部门的价值预测都相同。 非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我大胆地简化了该问题,并删除了该函数以更好地显示分别对组进行建模的过程:

library(magrittr)
library(forecast)

dat <- data.frame(value = c(rnorm(36, 5),
                            rnorm(36, 50)),
                  group = rep(1:2, each = 36))

# make a list where each element is a group's timeseries
sect_list <- dat %>%
    split(dat$group) %>%
    lapply(function(x, frequency, start) {
        ts(x[["value"]], frequency = 12, start = 1 ) })

# then forecast on each groups timeseries
fc <- lapply(sect_list, function(x) { data.frame(PointEstimate = forecast(x, h=1)$mean ) }) %>%
    do.call(rbind, .) # turn into one big data.frame

fc

PointEstimate
1      5.120082
2     49.752510

让我知道您是否迷恋于此。