霍尔特通过将一组观察结果(如每个地区/每个产品的HW)分组来在R中过冬



我正在尝试为以下模式的数据集做一个冬季天气预报:

>Insample
Region   Week     Sales
   x    01/1/2013   200
   x    08/1/2013   250
   x    15/1/2013   185
   x    22/1/2013   375
   y    01/1/2013   155
   y    08/1/2013   160
   y    15/1/2013   225
   y    22/1/2013   200
   z    01/1/2013   345
   z    08/1/2013   285
   z    15/1/2013   300 
   z    22/1/2013   325

我一直在关注R和Rob Hyndman的Otexts的小书。但在我看来,我们一次只能考虑一个数据集。但是考虑到这个数据集中的区域数量,我可能必须在工作区中单独存储每个区域的数据,并每次都从那里读取。这似乎不太有效。有什么办法能解决这个问题吗?

我也有同样的问题与arima,但有人建议使用这个,它工作:

arima_fits <- group_by(Insample, Region) %>% do(fit=auto.arima(.$Sales))

但这似乎对HW没有帮助。

hw_fits <- group_by(Insample, Region) %>% do(fit=hw(.$Sales))

错误:

在ets(x, "AAA", alpha = alpha, beta = beta, gamma = gamma,阻尼=阻尼,:非季节性数据

因为我得到了这个错误,我试着对每个地区(单变量序列- 1个地区的销售额)进行分析,结果很好。

fit1 <- hw(Region1, seasonal="additive")

有什么建议吗?

 Insample <- read.table(text="Region Week Sales
  x 01/1/2013 200
  x 08/1/2013 250
  x 15/1/2013 185
  x 22/1/2013 375
  y 01/1/2013 155
  y 08/1/2013 160
  y 15/1/2013 225
  y 22/1/2013 200
  z 01/1/2013 345
  z 08/1/2013 285
  z 15/1/2013 300
  z 22/1/2013 325",sep="",header=T,stringsAsFactors=F)
  library(stringr)
  library(dplyr)
  library(forecast)
  Insample %>% 
  group_by(Region) %>%
  mutate(year= as.numeric(str_extract(Week, perl('(?<=\/)\d+$'))), #extract year from Week column
       tsR= ts(Sales, start=year, frequency=52)) %>% 
       do(data.frame(fc = forecast(ets(.$tsR))))
hltwtr<-function(x)   
{
tsfull<- ts(x$Sales, start=c(2013,2), freq=12)
  fr<-hw(tsfull, seasonal="additive", bootstrap=TRUE, simulate=TRUE,h=1, alpha = 0.7)
  fr<-data.frame(fr)
  return(fr)
}
i6<-split(Insample,list(Insample$Region))
dspt6<-i6[sapply(i6, function(x) dim(x)[1]) >= 2]
forecast<-sapply(dspt6,function(x) hltwtr(x))
forecast<-data.frame(forecast)
forecast <- t(forecast)
forecast <- as.data.frame(forecast)
forecast <- forecast[c(1)]
forecast <- do.call(rbind,forecast)
forecast <- t(forecast)
write.csv(forecast,'D:/forecast.csv')'

最新更新