setwd("C:/Users/favou/OneDrive/Documents")
require(tseries)
## Loading required package: tseries
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
require(forecast)
## Loading required package: forecast
library(readxl)
Data<-read_excel("icammda_pricemeaslesdata22.xls")
Data
## # A tibble: 84 × 4
## `Time(Month)` Year Month `Jere LGA, Borno State`
## <dbl> <dbl> <chr> <dbl>
## 1 1 2016 Jan 12
## 2 2 2016 Feb 7
## 3 3 2016 Mar 1
## 4 4 2016 Apr 17
## 5 5 2016 May 50
## 6 6 2016 Jun 2
## 7 7 2016 Jul 8
## 8 8 2016 Aug 166
## 9 9 2016 Sept 131
## 10 10 2016 Oct 59
## # ℹ 74 more rows
head(Data)
## # A tibble: 6 × 4
## `Time(Month)` Year Month `Jere LGA, Borno State`
## <dbl> <dbl> <chr> <dbl>
## 1 1 2016 Jan 12
## 2 2 2016 Feb 7
## 3 3 2016 Mar 1
## 4 4 2016 Apr 17
## 5 5 2016 May 50
## 6 6 2016 Jun 2
tail(Data)
## # A tibble: 6 × 4
## `Time(Month)` Year Month `Jere LGA, Borno State`
## <dbl> <dbl> <chr> <dbl>
## 1 79 2022 Jul 138
## 2 80 2022 Aug 158
## 3 81 2022 Sept 1
## 4 82 2022 Oct 0
## 5 83 2022 Nov 2
## 6 84 2022 Dec 0
Data$`Jere LGA, Borno State`
## [1] 12 7 1 17 50 2 8 166 131 59 39 9 0 4 0 1 1 0 0
## [20] 0 1 0 2 6 0 2 2 1 2 3 0 0 2 0 11 244 343 474
## [39] 658 468 56 34 0 3 0 1 1 1 1 0 41 30 546 275 310 58 262
## [58] 87 53 178 26 205 123 138 174 352 242 271 46 79 90 73 157 84 233 134
## [77] 162 83 138 158 1 0 2 0
Data_2<-Data$`Jere LGA, Borno State`
#date
dates_data<- seq(as.Date("2016/1/1"), as.Date("2022/12/1"), by = "month")
dates_data
## [1] "2016-01-01" "2016-02-01" "2016-03-01" "2016-04-01" "2016-05-01"
## [6] "2016-06-01" "2016-07-01" "2016-08-01" "2016-09-01" "2016-10-01"
## [11] "2016-11-01" "2016-12-01" "2017-01-01" "2017-02-01" "2017-03-01"
## [16] "2017-04-01" "2017-05-01" "2017-06-01" "2017-07-01" "2017-08-01"
## [21] "2017-09-01" "2017-10-01" "2017-11-01" "2017-12-01" "2018-01-01"
## [26] "2018-02-01" "2018-03-01" "2018-04-01" "2018-05-01" "2018-06-01"
## [31] "2018-07-01" "2018-08-01" "2018-09-01" "2018-10-01" "2018-11-01"
## [36] "2018-12-01" "2019-01-01" "2019-02-01" "2019-03-01" "2019-04-01"
## [41] "2019-05-01" "2019-06-01" "2019-07-01" "2019-08-01" "2019-09-01"
## [46] "2019-10-01" "2019-11-01" "2019-12-01" "2020-01-01" "2020-02-01"
## [51] "2020-03-01" "2020-04-01" "2020-05-01" "2020-06-01" "2020-07-01"
## [56] "2020-08-01" "2020-09-01" "2020-10-01" "2020-11-01" "2020-12-01"
## [61] "2021-01-01" "2021-02-01" "2021-03-01" "2021-04-01" "2021-05-01"
## [66] "2021-06-01" "2021-07-01" "2021-08-01" "2021-09-01" "2021-10-01"
## [71] "2021-11-01" "2021-12-01" "2022-01-01" "2022-02-01" "2022-03-01"
## [76] "2022-04-01" "2022-05-01" "2022-06-01" "2022-07-01" "2022-08-01"
## [81] "2022-09-01" "2022-10-01" "2022-11-01" "2022-12-01"
plot(`Jere LGA, Borno State`~dates_data, data=Data,col='red', xlab = "Time (months)", type='l', lwd=3, main="Time Series plot of Measles cases in Nigeria")

acf(Data$`Jere LGA, Borno State`
, main="ACF of Measles cases in Nigeria", lag.max=12)

pacf(Data$`Jere LGA, Borno State`, main="PACF of Measles cases in Nigeria", lag.max=12)

#Test
adf.test(Data$`Jere LGA, Borno State`)
##
## Augmented Dickey-Fuller Test
##
## data: Data$`Jere LGA, Borno State`
## Dickey-Fuller = -3.8246, Lag order = 4, p-value = 0.02172
## alternative hypothesis: stationary
#Measles difference 1
Measles_case_d1<-diff(Data$`Jere LGA, Borno State`)
adf.test(Measles_case_d1)
## Warning in adf.test(Measles_case_d1): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: Measles_case_d1
## Dickey-Fuller = -5.0428, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
#plot
par(mfrow=c(1,1))
plot(Measles_case_d1, main="Differenced Measles Cases", type='l')

acf(Measles_case_d1, main="ACF of Measles cases in Jere LGA, Borno State", lag.max=12, ylim=c(-1,1))

pacf(Measles_case_d1, main="PACF of Measles cases in Jere LGA, Borno State", lag.max=12, ylim=c(-1,1))

#ARIMA fit
ts_measles<-ts(c(Data_2), start = c(2016), frequency = 12)
ts_measles
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2016 12 7 1 17 50 2 8 166 131 59 39 9
## 2017 0 4 0 1 1 0 0 0 1 0 2 6
## 2018 0 2 2 1 2 3 0 0 2 0 11 244
## 2019 343 474 658 468 56 34 0 3 0 1 1 1
## 2020 1 0 41 30 546 275 310 58 262 87 53 178
## 2021 26 205 123 138 174 352 242 271 46 79 90 73
## 2022 157 84 233 134 162 83 138 158 1 0 2 0
# to know various components
decomposed <- decompose(ts_measles)
plot(decomposed)

# view trend component
MeaslesTrend<-decomposed$trend
plot(MeaslesTrend, ylab = "Trend Component", xlab = "Time")

arima_model <- auto.arima(sqrt(ts_measles), ic = "aic", trace =T)
##
## ARIMA(2,1,2)(1,0,1)[12] with drift : 499.4077
## ARIMA(0,1,0) with drift : 499.3606
## ARIMA(1,1,0)(1,0,0)[12] with drift : 496.8347
## ARIMA(0,1,1)(0,0,1)[12] with drift : 497.1494
## ARIMA(0,1,0) : 497.3669
## ARIMA(1,1,0) with drift : 496.6547
## ARIMA(1,1,0)(0,0,1)[12] with drift : 496.5915
## ARIMA(1,1,0)(1,0,1)[12] with drift : 498.4702
## ARIMA(1,1,0)(0,0,2)[12] with drift : 498.4692
## ARIMA(1,1,0)(1,0,2)[12] with drift : Inf
## ARIMA(0,1,0)(0,0,1)[12] with drift : 497.3204
## ARIMA(2,1,0)(0,0,1)[12] with drift : 497.5704
## ARIMA(1,1,1)(0,0,1)[12] with drift : 497.8492
## ARIMA(2,1,1)(0,0,1)[12] with drift : 499.5704
## ARIMA(1,1,0)(0,0,1)[12] : 494.5929
## ARIMA(1,1,0) : 494.6626
## ARIMA(1,1,0)(1,0,1)[12] : 496.4714
## ARIMA(1,1,0)(0,0,2)[12] : 496.4702
## ARIMA(1,1,0)(1,0,0)[12] : 494.8373
## ARIMA(1,1,0)(1,0,2)[12] : 498.464
## ARIMA(0,1,0)(0,0,1)[12] : 495.3209
## ARIMA(2,1,0)(0,0,1)[12] : 495.5724
## ARIMA(1,1,1)(0,0,1)[12] : 495.8514
## ARIMA(0,1,1)(0,0,1)[12] : 495.1504
## ARIMA(2,1,1)(0,0,1)[12] : 497.5724
##
## Best model: ARIMA(1,1,0)(0,0,1)[12]
# Print the ARIMA model with the lowest AIC
summary(arima_model)
## Series: sqrt(ts_measles)
## ARIMA(1,1,0)(0,0,1)[12]
##
## Coefficients:
## ar1 sma1
## -0.1856 -0.1842
## s.e. 0.1115 0.1256
##
## sigma^2 = 21.49: log likelihood = -244.3
## AIC=494.59 AICc=494.9 BIC=501.85
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set -0.02615164 4.5526 3.078198 NaN Inf 0.4495227 0.01862956
cases_fit<-arima(x=sqrt(ts_measles), order=c(1,1,0),
seasonal=list(order=c(0,0,1)))
forecast<-forecast(cases_fit,h=24)
forecast
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 2023 -0.20326985 -6.072703 5.666163 -9.179793 8.773253
## Feb 2023 0.05873514 -7.510793 7.628263 -11.517859 11.635329
## Mar 2023 -0.99065818 -10.052644 8.071328 -14.849770 12.868454
## Apr 2023 -0.32484884 -10.648064 9.998366 -16.112844 15.463146
## May 2023 -0.68124201 -12.130561 10.768077 -18.191464 16.828980
## Jun 2023 -0.15975139 -12.633413 12.313910 -19.236570 18.917067
## Jul 2023 -0.53597673 -13.956108 12.884155 -21.060297 19.988343
## Aug 2023 -0.65782193 -14.961919 13.646275 -22.534051 21.218407
## Sep 2023 1.74930633 -13.387224 16.885836 -21.400018 24.898631
## Oct 2023 1.90410117 -14.021409 17.829611 -22.451864 26.260067
## Nov 2023 1.63539480 -15.041811 18.312601 -23.870191 27.140980
## Dec 2023 1.88733016 -15.509121 19.283782 -24.718247 28.492907
## Jan 2024 1.84056413 -15.981054 19.662183 -25.415249 29.096378
## Feb 2024 1.84924517 -16.431257 20.129747 -26.108370 29.806860
## Mar 2024 1.84763373 -16.872452 20.567719 -26.782267 30.477534
## Apr 2024 1.84793286 -17.303106 20.998971 -27.441053 31.136919
## May 2024 1.84787733 -17.724363 21.420117 -28.085280 31.781035
## Jun 2024 1.84788764 -18.136726 21.832502 -28.715942 32.411717
## Jul 2024 1.84788573 -18.540755 22.236526 -29.333849 33.029621
## Aug 2024 1.84788608 -18.936930 22.632703 -29.939748 33.635520
## Sep 2024 1.84788602 -19.325695 23.021467 -30.534311 34.230083
## Oct 2024 1.84788603 -19.707448 23.403220 -31.118153 34.813925
## Nov 2024 1.84788603 -20.082558 23.778330 -31.691833 35.387606
## Dec 2024 1.84788603 -20.451358 24.147130 -32.255865 35.951637
plot(forecast(cases_fit,h=24), ylab="sqrt of cases", xlab="Time(years)",lwd=1)
legend("topleft", c("Measles cases"), cex=0.8, col=1,lty=1)

checkresiduals(cases_fit)

##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,0)(0,0,1)[12]
## Q* = 27.214, df = 15, p-value = 0.02704
##
## Model df: 2. Total lags used: 17