Shraddha Shraddha - 1 month ago 11
R Question

holt winters in R by grouping a set of observations (like HW per region/per product)

I am trying to do a holt winters forecast for a dataset which is of this pattern..

>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


I have been following the little book of R and Rob Hyndman's Otexts...
But to my understanding, we can consider only one dataset at a time. But considering the number of regions I have here in this dataset, I might have to store data for each region separately in the workspace and read from there everytime. That doesn't seem efficient. Is there any way to handle this?

I had the same issue with
arima
as well but someone suggested using this and it worked:

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


But this doesn't seem to help with HW.

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


Error:
Error in ets(x, "AAA", alpha = alpha, beta = beta, gamma = gamma, damped = damped, :
Nonseasonal data


Since I got this error, I tried doing it per region (univariate series - sales of 1 region) and it worked fine.

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


Any suggestions??

Answer
 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))))