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)