# 1.LOADING DATA
inflation<-read.csv("~/som.csv")
# 2. SELECTING VARIABLE OF INTEREST
inflation<-inflation$CPI
# 3. DESCRIPTIVE STATISTICS
summary(inflation)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 100.0 124.3 158.9 154.8 184.9 218.2
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 100.0 124.3 158.9 154.8 184.9 218.2
library(AdequacyModel)
descriptive(inflation)

## $mean
## [1] 154.7518
##
## $median
## [1] 158.9
##
## $mode
## [1] 110
##
## $variance
## [1] 1189.735
##
## $Skewness
## [1] 0.07614
##
## $Kurtosis
## [1] -1.32706
##
## $minimum
## [1] 100
##
## $maximum
## [1] 218.23
##
## $n
## [1] 123
## $mean
## [1] 154.7518
##
## $median
## [1] 158.9
##
## $mode
## [1] 110
##
## $variance
## [1] 1189.735
##
## $Skewness
## [1] 0.07614
##
## $Kurtosis
## [1] -1.32706
##
## $minimum
## [1] 100
##
## $maximum
## [1] 218.23
##
## $n
## [1] 123
# 4.CHECKING MISSING VALUE
any(is.na(inflation))
## [1] FALSE
## [1] FALSE
# 5. CHECKING TIME SERIES
class(inflation)
## [1] "numeric"
## [1] "numeric"
is.ts(inflation)
## [1] FALSE
## [1] FALSE
#6.converting to time series
inflationts<-ts(inflation,frequency = 12,start=c(2014,12))
is.ts(inflationts)
## [1] TRUE
## [1] TRUE
#7 ploting
windows()
plot.ts(inflationts,col="pink",
xlab="month",
ylab="inflation",
main="inflation data")

#8. DECOMPOSTION
windows()
add<-plot(decompose(inflationts,type = "additive"))

windows()
mult<-plot(decompose(inflationts,type = "multiplicative"))
#9. CHECKING STATIONARITY
library(tseries)
## Warning: package 'tseries' was built under R version 4.2.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo

## Warning: package 'tseries' was built under R version 4.2.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
adf.test(inflationts)
##
## Augmented Dickey-Fuller Test
##
## data: inflationts
## Dickey-Fuller = -2.9364, Lag order = 4, p-value = 0.1875
## alternative hypothesis: stationary
##
## Augmented Dickey-Fuller Test
##
## data: inflationts
## Dickey-Fuller = -2.9364, Lag order = 4, p-value = 0.1875
## alternative hypothesis: stationary
pp.test(inflationts)
##
## Phillips-Perron Unit Root Test
##
## data: inflationts
## Dickey-Fuller Z(alpha) = -8.39, Truncation lag parameter = 4, p-value =
## 0.6311
## alternative hypothesis: stationary
##
## Phillips-Perron Unit Root Test
##
## data: inflationts
## Dickey-Fuller Z(alpha) = -8.39, Truncation lag parameter = 4, p-value =
## 0.6311
## alternative hypothesis: stationary
# 10.DIFFERENCING
inflationdiff<-diff(inflationts,differences = 1)
#11.CHECKING DIFFERENCING DATA
adf.test(inflationdiff)
##
## Augmented Dickey-Fuller Test
##
## data: inflationdiff
## Dickey-Fuller = -4.0199, Lag order = 4, p-value = 0.01064
## alternative hypothesis: stationary
##
## Augmented Dickey-Fuller Test
##
## data: inflationdiff
## Dickey-Fuller = -4.0199, Lag order = 4, p-value = 0.01064
## alternative hypothesis: stationary
pp.test(inflationdiff)
## Warning in pp.test(inflationdiff): p-value smaller than printed p-value
##
## Phillips-Perron Unit Root Test
##
## data: inflationdiff
## Dickey-Fuller Z(alpha) = -92.094, Truncation lag parameter = 4, p-value
## = 0.01
## alternative hypothesis: stationary
## Warning in pp.test(inflationdiff): p-value smaller than printed p-value
##
## Phillips-Perron Unit Root Test
##
## data: inflationdiff
## Dickey-Fuller Z(alpha) = -92.094, Truncation lag parameter = 4, p-value
## = 0.01
## alternative hypothesis: stationary
#12. GOVERNING NUMBER OF DIFFERENCING
library(forecast)
## Warning: package 'forecast' was built under R version 4.2.3
## Warning: package 'forecast' was built under R version 4.2.3
ndiffs(inflationts)
## [1] 1
## [1] 1
pacf(inflationts)

#13. governing the number of p and q parameters
acf(inflationdiff)

pacf(inflationdiff)

pacf
## function (x, lag.max, plot, na.action, ...)
## UseMethod("pacf")
## <bytecode: 0x000002231172b768>
## <environment: namespace:stats>
## function (x, lag.max, plot, na.action, ...)
## UseMethod("pacf")
## <bytecode: 0x000002b1b425d108>
## <environment: namespace:stats>
# 14. Auto_arima
arimamodel<-auto.arima(inflationts)
summary(arimamodel)
## Series: inflationts
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## 0.3938 0.9973
## s.e. 0.0902 0.1775
##
## sigma^2 = 1.447: log likelihood = -194.71
## AIC=395.42 AICc=395.62 BIC=403.83
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.01953941 1.188035 0.8304844 -0.0272713 0.5959843 0.07442398
## ACF1
## Training set -0.06762716
## Series: inflationts
## ARIMA(1,1,0) with drift
##
## Coefficients:
## ar1 drift
## 0.3938 0.9973
## s.e. 0.0902 0.1775
##
## sigma^2 = 1.447: log likelihood = -194.71
## AIC=395.42 AICc=395.62 BIC=403.83
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.01953941 1.188035 0.8304844 -0.0272713 0.5959843 0.07442398
## ACF1
## Training set -0.06762716
#15.COMPARING AUTO ARIMA MODELS
arima1<-arima(inflationts,order = c(1,1,2))
## Warning in arima(inflationts, order = c(1, 1, 2)): possible convergence problem:
## optim gave code = 1
## Warning in arima(inflationts, order = c(1, 1, 2)): possible convergence problem:
## optim gave code = 1
arima2<-arima(inflationts,order = c(0,1,2))
arima3<-arima(inflationts,order = c(1,1,0))
arima4<-arima(inflationts,order = c(0,1,0))
aic<-cbind(arima1$aic,arima2$aic,arima3$aic,arima4$aic)
aic
## [,1] [,2] [,3] [,4]
## [1,] 403.4526 426.2482 411.9608 464.1167
## [,1] [,2] [,3] [,4]
## [1,] 403.4526 426.2482 411.9608 464.1167
bic<-cbind(BIC(arima1),BIC(arima2),BIC(arima3),BIC(arima4))
bic
## [,1] [,2] [,3] [,4]
## [1,] 414.6686 434.6602 417.5688 466.9207
## [,1] [,2] [,3] [,4]
## [1,] 414.6686 434.6602 417.5688 466.9207
# 16. forecasting
arima1f<-forecast(arima(inflationts,order = c(1,1,2)))
## Warning in arima(inflationts, order = c(1, 1, 2)): possible convergence problem:
## optim gave code = 1
## Warning in arima(inflationts, order = c(1, 1, 2)): possible convergence problem:
## optim gave code = 1
arima2f<-forecast(arima(inflationts,order = c(0,1,2)))
arima3f<-forecast(arima(inflationts,order = c(1,1,0)))
arima4f<-forecast(arima(inflationts,order = c(0,1,0)))
# forecasting metrics
library(TSstudio)
## Warning: package 'TSstudio' was built under R version 4.2.3
## Warning: package 'TSstudio' was built under R version 4.2.3
splitdata<-ts_split(inflationts,sample.out = 12)
traindata<-splitdata$train
testdata<-splitdata$test
arima1f<-forecast(arima(traindata,order = c(1,1,2)))
## Warning in arima(traindata, order = c(1, 1, 2)): possible convergence problem:
## optim gave code = 1
## Warning in arima(traindata, order = c(1, 1, 2)): possible convergence problem:
## optim gave code = 1
arima2f<-forecast(arima(traindata,order = c(1,1,0)))
arima3f<-forecast(arima(traindata,order = c(0,1,2)))
arima4f<-forecast(arima(traindata,order = c(0,1,0)))
library(Metrics)
## Warning: package 'Metrics' was built under R version 4.2.3
##
## Attaching package: 'Metrics'
## The following object is masked from 'package:forecast':
##
## accuracy
## Warning: package 'Metrics' was built under R version 4.2.3
##
## Attaching package: 'Metrics'
## The following object is masked from 'package:forecast':
##
## accuracy
s1f<-forecast::accuracy(arima1f,testdata)
s2f<-forecast::accuracy(arima2f,testdata)
s3f<-forecast::accuracy(arima3f,testdata)
s4f<-forecast::accuracy(arima4f,testdata)
metrics<-cbind(s1f,s2f,s3f,s4f)
windows()
plot(arima1f)

windows()
plot(arima2f)

windows()
plot(arima3f)

windows()
plot(arima4f)

#comparing auto-arima to other time series models
library(forecast)
arimamodel<-auto.arima(traindata)
arimamodel
## Series: traindata
## ARIMA(2,1,1) with drift
##
## Coefficients:
## ar1 ar2 ma1 drift
## -0.5571 0.2410 0.9803 0.9080
## s.e. 0.1645 0.1546 0.1181 0.1711
##
## sigma^2 = 1.481: log likelihood = -176.19
## AIC=362.39 AICc=362.96 BIC=375.89
## Series: traindata
## ARIMA(2,1,1) with drift
##
## Coefficients:
## ar1 ar2 ma1 drift
## -0.5571 0.2410 0.9803 0.9080
## s.e. 0.1645 0.1546 0.1181 0.1711
##
## sigma^2 = 1.481: log likelihood = -176.19
## AIC=362.39 AICc=362.96 BIC=375.89
etsmodel<-ets(traindata)
etsmodel
## ETS(A,Ad,N)
##
## Call:
## ets(y = traindata)
##
## Smoothing parameters:
## alpha = 0.9999
## beta = 0.181
## phi = 0.9732
##
## Initial states:
## l = 100.3368
## b = 0.1034
##
## sigma: 1.3383
##
## AIC AICc BIC
## 594.3276 595.1353 610.5847
## ETS(A,Ad,N)
##
## Call:
## ets(y = traindata)
##
## Smoothing parameters:
## alpha = 0.9999
## beta = 0.181
## phi = 0.9732
##
## Initial states:
## l = 100.3368
## b = 0.1034
##
## sigma: 1.3383
##
## AIC AICc BIC
## 594.3276 595.1353 610.5847
batsmodel<-bats(traindata)
batsmodel
## BATS(1, {0,0}, 1, -)
##
## Call: bats(y = traindata)
##
## Parameters
## Lambda: 1
## Alpha: 0.9996527
## Beta: 0.06537387
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 1.071639e+02
## [2,] 3.575319e-03
## attr(,"lambda")
## [1] 0.9999999
##
## Sigma: 1.563269
## AIC: 631.9429
## BATS(1, {0,0}, 1, -)
##
## Call: bats(y = traindata)
##
## Parameters
## Lambda: 1
## Alpha: 0.9996527
## Beta: 0.06537387
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 1.071639e+02
## [2,] 3.575319e-03
## attr(,"lambda")
## [1] 0.9999999
##
## Sigma: 1.563269
## AIC: 631.9429
tbatsmodel<-tbats(traindata)
tbatsmodel
## BATS(1, {0,0}, 1, -)
##
## Call: tbats(y = traindata)
##
## Parameters
## Alpha: 0.996089
## Beta: 0.03795683
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 108.7886675
## [2,] 0.3960777
##
## Sigma: 1.592509
## AIC: 634.0568
## BATS(1, {0,0}, 1, -)
##
## Call: tbats(y = traindata)
##
## Parameters
## Alpha: 0.996089
## Beta: 0.03795683
## Damping Parameter: 1
##
## Seed States:
## [,1]
## [1,] 108.7886675
## [2,] 0.3960777
##
## Sigma: 1.592509
## AIC: 634.0568
# FORCASTING FOR SARIMA,ETS,BATS,TBATS
arimaforecast<-forecast(arimamodel,h=12)
etsforecast<-forecast(etsmodel,h=12)
batsforecast<-forecast(batsmodel,h=12)
tbatsforecast<-forecast(tbatsmodel,h=12)
windows()
plot(arimaforecast)

windows()
plot(etsforecast)

windows()
plot(batsforecast)

windows()
plot(tbatsforecast)
