# install.packages("data.table")
library(data.table)
library(forecast)
library(knitr) # for kable table formatting
4.18 Some series contain more than a single seasonal pattern. For example, when the series contains daily and monthly seasonality, or hourly and daily seasonality. One example is electricity demand, which often exhibits a day-of-week cycle as well as a within-day cycle. Other examples include call center arrivals where operating hours differ on weekdays and weekends, hospital admissions, and transportation and internet traffic.
We consider a real dataset on hourly bike sharing rentals in Washington DC, which displays two seasonal cycles.
Download the file hour.csv from https://archive.ics.uci.edu/ml/machine-learning-databases/00275/ (or from www.forecastingbook.com/mooc). You can read more about the dataset here
How can we use the smoothing methods discussed in this week’s videos and articles in order to forecast the hourly bike demand?
bike.hourly.df = read.csv("/Users/noname/Dropbox/Coursera/Forecasting - Time Series/Tsing Hua Time Series/Week4 Smoothing Based Methods/Bike-Sharing-Dataset/hour.csv")
bike.hourly.msts <- msts(bike.hourly.df$cnt, seasonal.periods = c(24, 168, 8766))
bike.hourly.fit = tbats(bike.hourly.msts)
bike.hourly.pred = forecast(bike.hourly.fit, h=8766)
plot(bike.hourly.pred, main = "Hourly Forecast for one year", xlab = "Hours", ylab = "Bike counts")
# bike.daily.df = read.csv("/Users/bruce/Dropbox/Coursera/Forecasting - Time Series/Tsing Hua Time Series/Week4 Smoothing Based Methods/Bike-Sharing-Dataset/day.csv")
bike.daily.df = read.csv("/Users/noname/Dropbox/Coursera/Forecasting - Time Series/Tsing Hua Time Series/Week4 Smoothing Based Methods/Bike-Sharing-Dataset/day.csv")
bike.daily.msts <- msts(bike.daily.df$cnt, seasonal.periods = c(7, 365.25))
bike.daily.tbats <- tbats(bike.daily.msts)
bike.daily.tbats.pred <- forecast(bike.daily.tbats, h = 365)
bike.daily.stlm <- stlm(bike.daily.msts, s.window = "periodic", method = "ets")
bike.daily.stlm.pred <- forecast(bike.daily.stlm, h = 365)
par(mfrow = c(2, 1))
plot(bike.daily.tbats.pred, ylim = c(0, 9000), xlab = "Year", ylab = "Daily Bike Rentals", main = "TBATS")
plot(bike.daily.stlm.pred, ylim = c(0, 9000), xlab = "Year", ylab = "Daily Bike Rentals", main = "STL + ETS")