Baltmore city annual water use, liters per capita per day, 1885-1968
water = read.csv("baltmore-city-annual-water-use-l.csv")
library(fpp)
## Loading required package: forecast
## Warning: package 'forecast' was built under R version 3.3.2
## Loading required package: fma
## Warning: package 'fma' was built under R version 3.3.2
## Loading required package: expsmooth
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 3.3.2
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 3.3.2
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: tseries
## Warning: package 'tseries' was built under R version 3.3.2
library(forecast)
library(xts)
## Warning: package 'xts' was built under R version 3.3.2
library(tseries)
str(water)
## 'data.frame': 79 obs. of 2 variables:
## $ Year : int 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 ...
## $ Baltmore.city.annual.water.use..liters.per.capita.per.day..1885.1968: int 356 386 397 397 413 458 485 344 390 360 ...
head(water)
## Year
## 1 1885
## 2 1886
## 3 1887
## 4 1888
## 5 1889
## 6 1890
## Baltmore.city.annual.water.use..liters.per.capita.per.day..1885.1968
## 1 356
## 2 386
## 3 397
## 4 397
## 5 413
## 6 458
tail (water)
## Year
## 74 1958
## 75 1959
## 76 1960
## 77 1961
## 78 1962
## 79 1963
## Baltmore.city.annual.water.use..liters.per.capita.per.day..1885.1968
## 74 602
## 75 594
## 76 587
## 77 587
## 78 625
## 79 613
names(water)[2]<-c("use")
train = water[1:63,]
test = water[64:79,]
Models: the data are not seasonal so, no seasonal models were used
fit1 = ses(ts.train)
fit2 = holt(ts.train)
fit3 = holt(ts.train,exponential=TRUE)
fit4 = holt(ts.train,damped=TRUE)
fit5 = holt(ts.train,exponential=TRUE,damped=TRUE)
# Results for first model:
fit1$model
## Simple exponential smoothing
##
## Call:
## ses(y = ts.train)
##
## Smoothing parameters:
## alpha = 0.9999
##
## Initial states:
## l = 355.9419
##
## sigma: 35.6975
##
## AIC AICc BIC
## 717.4776 717.8844 723.9070
accuracy(fit1) # training set
## ME RMSE MAE MPE MAPE MASE
## Training set 4.144218 35.69748 23.79471 0.5850507 4.952862 0.9841707
## ACF1
## Training set 0.01900003
accuracy(fit1,ts.test) # test set
## ME RMSE MAE MPE MAPE MASE
## Training set 4.144218 35.69748 23.79471 0.5850507 4.952862 0.9841707
## Test set -42.401501 47.24963 42.40150 -7.5208965 7.520897 1.7537646
## ACF1 Theil's U
## Training set 0.01900003 NA
## Test set 0.55384686 3.160426
ME1= -42.401501
RMSE1 = 47.24963
MAE1 = 42.40150
MPE1= -7.5208965
MAPE1= 7.520897
MASE1= 1.7537646
# Results for second model:
fit2$model
## Holt's method
##
## Call:
## holt(y = ts.train)
##
## Smoothing parameters:
## alpha = 0.9999
## beta = 1e-04
##
## Initial states:
## l = 396.5706
## b = 3.8617
##
## sigma: 35.8949
##
## AIC AICc BIC
## 722.1726 723.2253 732.8883
accuracy(fit2) # training set
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3601994 35.89495 23.88767 -0.3949746 5.033001 0.9880158
## ACF1
## Training set 0.005778681
accuracy(fit2,ts.test) # test set
## ME RMSE MAE MPE MAPE MASE
## Training set -0.3601994 35.89495 23.88767 -0.3949746 5.033001 0.9880158
## Test set -63.6286874 68.90130 63.62869 -11.2399795 11.239979 2.6317402
## ACF1 Theil's U
## Training set 0.005778681 NA
## Test set 0.590756262 4.59837
ME2= -63.6286874
RMSE2 = 68.90130
MAE2 = 63.62869
MPE2= -11.2399795
MAPE2= 11.239979
MASE2= 2.6317402
# Results for third model:
fit3$model
## Holt's method with exponential trend
##
## Call:
## holt(y = ts.train, exponential = TRUE)
##
## Smoothing parameters:
## alpha = 0.9999
## beta = 1e-04
##
## Initial states:
## l = 397.21
## b = 1.0047
##
## sigma: 0.0738
##
## AIC AICc BIC
## 722.3212 723.3738 733.0368
accuracy(fit3) # training set
## ME RMSE MAE MPE MAPE MASE
## Training set 1.199121 36.0041 24.20351 -0.06419636 5.093922 1.001079
## ACF1
## Training set 0.005386954
accuracy(fit3,ts.test) # test set
## ME RMSE MAE MPE MAPE MASE
## Training set 1.199121 36.00410 24.20351 -0.06419636 5.093922 1.001079
## Test set -58.527237 63.55173 58.52724 -10.34605296 10.346053 2.420740
## ACF1 Theil's U
## Training set 0.005386954 NA
## Test set 0.580782417 4.243352
ME3= -58.527237
RMSE3 = 63.55173
MAE3 = 58.52724
MPE3= -10.34605296
MAPE3= 10.346053
MASE3= 2.420740
# Results for fourth model:
fit4$model
## Damped Holt's method
##
## Call:
## holt(y = ts.train, damped = TRUE)
##
## Smoothing parameters:
## alpha = 0.9999
## beta = 1e-04
## phi = 0.98
##
## Initial states:
## l = 395.1801
## b = 5.2393
##
## sigma: 35.903
##
## AIC AICc BIC
## 724.2010 725.7010 737.0598
accuracy(fit4) # training set
## ME RMSE MAE MPE MAPE MASE
## Training set 0.5882346 35.90303 23.927 -0.2209718 5.033189 0.9896423
## ACF1
## Training set 0.007069687
accuracy(fit4,ts.test) # test set
## ME RMSE MAE MPE MAPE MASE
## Training set 0.5882346 35.90303 23.927 -0.2209718 5.033189 0.9896423
## Test set -49.8780045 54.66056 49.878 -8.8310543 8.831054 2.0629995
## ACF1 Theil's U
## Training set 0.007069687 NA
## Test set 0.563391484 3.652957
ME4= -49.8780045
RMSE4 = 54.66056
MAE4 = 49.878
MPE4= -8.8310543
MAPE4= 8.831054
MASE4= 2.0629995
# Results for fifth model:
fit5$model
## Damped Holt's method with exponential trend
##
## Call:
## holt(y = ts.train, damped = TRUE, exponential = TRUE)
##
## Smoothing parameters:
## alpha = 0.9999
## beta = 1e-04
## phi = 0.8653
##
## Initial states:
## l = 395.0726
## b = 1.0013
##
## sigma: 0.0744
##
## AIC AICc BIC
## 724.8878 726.3878 737.7466
accuracy(fit5) # training set
## ME RMSE MAE MPE MAPE MASE
## Training set 3.467551 36.03582 24.4017 0.3971757 5.124481 1.009276
## ACF1
## Training set 0.006067191
accuracy(fit5,ts.test) # test set
## ME RMSE MAE MPE MAPE MASE
## Training set 3.467551 36.03582 24.40170 0.3971757 5.124481 1.009276
## Test set -42.420324 47.26807 42.42032 -7.5241979 7.524198 1.754543
## ACF1 Theil's U
## Training set 0.006067191 NA
## Test set 0.553860084 3.161652
ME5= -42.420324
RMSE5 = 47.26807
MAE5 = 42.42032
MPE5= -7.5241979
MAPE5= 7.524198
MASE5= 1.754543
##Comparing errors
error.matrix=matrix(c(ME1, RMSE1,MAE1,MPE1, MAPE1, MASE1,ME2, RMSE2,MAE2,MPE2, MAPE2, MASE2,ME3, RMSE3,MAE3,MPE3, MAPE3, MASE3,ME4, RMSE4,MAE4,MPE4, MAPE4, MASE4,ME5, RMSE5,MAE5,MPE5, MAPE5, MASE5),ncol=5)
colnames(error.matrix)=c("SES","Holt's","Exponential", "Additive", "Multiplicative")
rownames(error.matrix)=c("ME","RMSE","MAE","MPE","MAPE", "MASE")
error.table<-as.table(error.matrix)
error.table
## SES Holt's Exponential Additive Multiplicative
## ME -42.401501 -63.628687 -58.527237 -49.878005 -42.420324
## RMSE 47.249630 68.901300 63.551730 54.660560 47.268070
## MAE 42.401500 63.628690 58.527240 49.878000 42.420320
## MPE -7.520897 -11.239980 -10.346053 -8.831054 -7.524198
## MAPE 7.520897 11.239979 10.346053 8.831054 7.524198
## MASE 1.753765 2.631740 2.420740 2.063000 1.754543