Individual Assignment Time Series Projct Muse Mohamed kalinle

inflation<-read.csv("~/som.csv")

#B. Selecting the variable of interest within INFRSL Data

cpi<-inflation$CPI

#C. Finding Descriptive statistics of CPI Variable

summary(cpi)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   100.0   124.3   158.9   154.8   184.9   218.2
library(AdequacyModel)
descriptive(cpi)

## $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
#D. Checking missing values within CPI Dataset
any(is.na(cpi))
## [1] FALSE
#E. Times Series Determination of CPI Dataset
class(cpi)
## [1] "numeric"
is.ts(cpi)
## [1] FALSE
#F. Transformation of CPI Dataset into Time series
cpits<-ts(cpi, frequency = 12, start = c(2012,12))

#G. Visualization of CPITS Dataset
plot.ts(cpits, 
        col= "green",
        xlab="Inflation Years",
        ylab="Consumer Price Index",
        main="Somaliland Inflation Rate in 2012-2023")

windows()

#H. Decomposition of CPITS Dataset
additive<-plot(decompose(cpits, type = "additive"))

windows()
multiplicative<-plot(decompose(cpits, type = "multiplicative"))

windows()

#I. Stationarity Verification of CPITS Dataset
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
adf.test(cpits)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  cpits
## Dickey-Fuller = -2.9364, Lag order = 4, p-value = 0.1875
## alternative hypothesis: stationary
pp.test(cpits)
## 
##  Phillips-Perron Unit Root Test
## 
## data:  cpits
## Dickey-Fuller Z(alpha) = -8.39, Truncation lag parameter = 4, p-value =
## 0.6311
## alternative hypothesis: stationary
#J. Determination of differencing number of CPITS Dataset 
library(forecast)
## Warning: package 'forecast' was built under R version 4.2.3
ndiffs(cpits) 
## [1] 1
#K. Differencing CPITS Dataset to Make stationary data
cpitsdiff<-diff(cpits, differences = 1)

#L. Re-Checking Stationary of differenced CPITS Dataset
library(tseries)
adf.test(cpitsdiff)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  cpitsdiff
## Dickey-Fuller = -4.0199, Lag order = 4, p-value = 0.01064
## alternative hypothesis: stationary
pp.test(cpitsdiff) 
## Warning in pp.test(cpitsdiff): p-value smaller than printed p-value
## 
##  Phillips-Perron Unit Root Test
## 
## data:  cpitsdiff
## Dickey-Fuller Z(alpha) = -92.094, Truncation lag parameter = 4, p-value
## = 0.01
## alternative hypothesis: stationary
#M. Identification of (p, d and q) parameters
acf(cpitsdiff)

windows()
pacf(cpitsdiff)

windows()

#N. Modelling CPITS Dataset Using AUTOARIMA Function  
arimamodel<-auto.arima(cpits)
summary(arimamodel)
## Series: cpits 
## 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
#0. Modelling CPITS Dataset Using Different Order ARIMA Models
arima1<-arima(cpits, order =  c(1,1,2))
## Warning in arima(cpits, order = c(1, 1, 2)): possible convergence problem: optim
## gave code = 1
arima2<-arima(cpits, order =  c(0,1,2))
arima3<-arima(cpits, order =  c(1,1,0))


#P. Model Comparison & Selection of CPITS Dataset Using AIC, BIC & HQ
AIC<-cbind(arima1$aic, arima2$aic, arima3$aic)

BIC<-cbind(BIC(arima1), BIC(arima2),BIC(arima3))

HQIC<-cbind(arima1$loglik, arima2$loglik, arima3$loglik)

AIC;BIC;HQIC
##          [,1]     [,2]     [,3]
## [1,] 403.4526 426.2482 411.9608
##          [,1]     [,2]     [,3]
## [1,] 414.6686 434.6602 417.5688
##           [,1]      [,2]      [,3]
## [1,] -197.7263 -210.1241 -203.9804
#Q. Forecasting CPITS Dataset Using Different ARIMA Orders
arima1f<-forecast(arima(cpits, order =  c(1,1,2)))
## Warning in arima(cpits, order = c(1, 1, 2)): possible convergence problem: optim
## gave code = 1
arima2f<-forecast(arima(cpits, order =  c(0,1,2)))
arima3f<-forecast(arima(cpits, order =  c(1,1,0)))


#R. Forecasting Metrics of CPITS Dataset
library(TSstudio)
## Warning: package 'TSstudio' was built under R version 4.2.3
splitdata<-ts_split(cpits, sample.out = 12)
traindata<-splitdata$train
testdata<-splitdata$test

#S. Comparisons of Model Forecasting in CPITS Dataset
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
arima2f<-forecast(arima(traindata, order =  c(0,1,2)))
arima3f<-forecast(arima(traindata, order =  c(1,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
A1f<-forecast::accuracy(arima1f,testdata)
A2f<-forecast::accuracy(arima2f,testdata)
A3f<-forecast::accuracy(arima3f,testdata)

metrics<-cbind(A1f, A2f,A3f)
metrics
##                      ME     RMSE       MAE        MPE      MAPE       MASE
## Training set 0.03018769 1.235949 0.8737843 0.02057679 0.6417457 0.08394027
## Test set     7.01650840 7.955505 7.0165084 3.28477740 3.2847774 0.67404234
##                     ACF1 Theil's U         ME      RMSE      MAE       MPE
## Training set -0.07001577        NA  0.5382131  1.365558  0.98533 0.3721349
## Test set      0.78731886  4.091762 12.1366418 13.809854 12.13664 5.6789158
##                   MAPE       MASE       ACF1 Theil's U         ME      RMSE
## Training set 0.7014363 0.09465593 -0.2265239        NA  0.3690815  1.318522
## Test set     5.6789158 1.16590902  0.7755036  7.088089 11.3126139 12.982055
##                     MAE       MPE     MAPE       MASE       ACF1 Theil's U
## Training set  0.9615061 0.2546398 0.690332 0.09236728 -0.2650818        NA
## Test set     11.3126139 5.2899533 5.289953 1.08674861  0.7805930  6.659524
plot(arima1f)

plot(arima2f)

plot(arima3f)

#T. Comparing auto.arima to other time series models
library(forecast)
setarmodel<-auto.arima(traindata)
setarmodel
## 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<-auto.arima(traindata)
etsmodel
## 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
batsmodel<-auto.arima(traindata)
batsmodel
## 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
tbatsmodel<-auto.arima(traindata)
tbatsmodel
## 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
warimamodel<-auto.arima(traindata)
warimamodel
## 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
arfimamodel<-auto.arima(traindata)
arfimamodel
## 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
thetamodel<-auto.arima(traindata)
thetamodel
## 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
#V. Forecasting FOR SETAR, ETS, BATS, TBATS, ARFIMA, WARIMA, THETA Models
setarforecast<-forecast(setarmodel, h=12)
etsforecast<-forecast(etsmodel, h=12)
batsforecast<-forecast(batsmodel, h=12)
tbatsforecast<-forecast(tbatsmodel,  h=12)
warimaforecast<-forecast(warimamodel,  h=12)
arfimaforecast<-forecast(arfimamodel,  h=12)
thetaforecast<-forecast(thetamodel, h=12)


windows()
plot(setarforecast)

windows()
plot(etsforecast)
windows()
plot(batsforecast)
windows()
plot(tbatsforecast)
windows()
plot(warimaforecast)
windows()
plot(arfimaforecast)
windows()
plot(thetaforecast)