library(readr)
fatalities <- read_csv("fatalities.csv", col_names = FALSE)
## Parsed with column specification:
## cols(
##   X1 = col_integer()
## )
#barplot(fatalities)
fatalities <- ts(fatalities, start = c(2002,1), end=c(2017,12),frequency=12)
#par(mfrow=c(1,2))
plot.ts(fatalities, ylab="Fatalaties", col="orange", lwd=2,
        main="Death Count due to Insurgency in Jammu & Kashmir")

plot(decompose(fatalities))

log_fatalities <- log(fatalities)
par(mfrow=c(1,2))
boxplot(fatalities~floor(time(fatalities)), col= "skyblue",
        main = "Original Series")
boxplot(log_fatalities~floor(time(log_fatalities)), col= "tomato",
        main="Log-transfomred Series")

plot.ts(log_fatalities, ylab="Fatalaties", col="royalblue", lwd=2,
        main="Death Count due to Insurgency in Jammu & Kashmir")

monthplot(log_fatalities)

d1log_fatalities <- diff(log_fatalities,1)
plot.ts(d1log_fatalities, ylab="Fatalaties", col="orange", lwd=2,
        main="Death Count due to Insurgency in Jammu & Kashmir")
abline(h=0, lty=2, col="darkgreen", lwd=2)

par(mfrow=c(1,2))
acf(diff(d1log_fatalities,12),ylim=c(-1,1),col=c(2,rep(1,11)),lwd=1,lag.max=84)
pacf(diff(d1log_fatalities,12),ylim=c(-1,1),col=c(rep(1,11),2),lwd=1,lag.max=84)

# fitting the ARIMA(1,0,1)
mod <- arima(log_fatalities, order = c(0,1,3), seasonal=list(order=c(2,1,0),period=12))
##### Previsions a llarg termini amb el model complet ######
ultim <- c(2016,12)
pred=predict(mod,n.ahead=12)
pr<-ts(c(tail(log_fatalities,1),pred$pred),start=ultim+c(1,0),freq=12)
se<-ts(c(0,pred$se),start=ultim+c(1,0),freq=12)

#Intervals
tl1<-ts(exp(pr-1.96*se),start=ultim+c(1,0),freq=12)
tu1<-ts(exp(pr+1.96*se),start=ultim+c(1,0),freq=12)
pr1<-ts(exp(pr),start=ultim+c(1,0),freq=12)

ts.plot(fatalities,tl1,tu1,pr1,lty=c(1,2,2,1),col=c(1,4,4,2),xlim=c(ultim[1]-2,ultim[1]+3),type="o",main="Model ARIMA(1,0,1)", ylim = c(0,100))
abline(v=(ultim[1]-2):(ultim[1]+3),lty=3,col=4)

#options(warn = 0)
#install.packages("forecast")
library(forecast)
library(TTR)
insurgency_fit <- HoltWinters(log_fatalities)
plot(insurgency_fit)

insurgency_forecasts <- forecast:::forecast.HoltWinters(insurgency_fit, h=36)
forecast:::plot.forecast(insurgency_forecasts, col = "tomato", lwd=2, 
                         main = "Insurgency Forecast for 2018-20", fcol = "navyblue",
                         xlab = expression("Machine Intelligence Unit (Project Victor Sierra)"))

print(exp(insurgency_forecasts$mean))
##           Jan      Feb      Mar      Apr      May      Jun      Jul
## 2018 17.32707 18.23808 23.22308 24.51403 34.39955 33.94007 34.18904
## 2019 15.47511 16.28875 20.74093 21.89391 30.72283 30.31247 30.53483
## 2020 13.82109 14.54776 18.52409 19.55383 27.43910 27.07259 27.27119
##           Aug      Sep      Oct      Nov      Dec
## 2018 35.82325 37.69716 30.61578 23.29190 19.27359
## 2019 31.99437 33.66799 27.34349 20.80240 17.21358
## 2020 28.57473 30.06947 24.42094 18.57899 15.37374
  1. SQRT trnasformation
d1d12serie <- diff(diff(log_fatalities,12),1)

validation=function(model,dades){
  s=frequency(get(model$series))
  resid=model$residuals
  par(mfrow=c(2,2),mar=c(3,3,3,3))
  #Residuals plot
  plot(resid,main="Residuals")
  abline(h=0)
  abline(h=c(-3*sd(resid),3*sd(resid)),lty=3,col=4)
  #Square Root of absolute values of residuals (Homocedasticity)
  scatter.smooth(sqrt(abs(resid)),main="Square Root of Absolute residuals",
                 lpars=list(col=2))
  
  #Normal plot of residuals
  qqnorm(resid)
  qqline(resid,col=2,lwd=2)
  
  ##Histogram of residuals with normal curve
  hist(resid,breaks=20,freq=F)
  curve(dnorm(x,mean=mean(resid),sd=sd(resid)),col=2,add=T)
  
  
  #ACF & PACF of residuals
  par(mfrow=c(1,2))
  acf(resid,ylim=c(-1,1),lag.max=60,col=c(2,rep(1,s-1)),lwd=1)
  pacf(resid,ylim=c(-1,1),lag.max=60,col=c(rep(1,s-1),2),lwd=1)
  par(mfrow=c(1,1))
  
  #ACF & PACF of square residuals 
  par(mfrow=c(1,2))
  acf(resid^2,ylim=c(-1,1),lag.max=60,col=c(2,rep(1,s-1)),lwd=1)
  pacf(resid^2,ylim=c(-1,1),lag.max=60,col=c(rep(1,s-1),2),lwd=1)
  par(mfrow=c(1,1))
  
  #Ljung-Box p-values
  par(mar=c(2,2,1,1))
  tsdiag(model,gof.lag=7*s)
  cat("\n--------------------------------------------------------------------\n")
  print(model)
  
  #Stationary and Invertible
  cat("\nModul of AR Characteristic polynomial Roots: ", 
      Mod(polyroot(c(1,-model$model$phi))),"\n")
  cat("\nModul of MA Characteristic polynomial Roots: ",
      Mod(polyroot(c(1,model$model$theta))),"\n")
  
  #Model expressed as an MA infinity (psi-weights)
  psis=ARMAtoMA(ar=model$model$phi,ma=model$model$theta,lag.max=36)
  names(psis)=paste("psi",1:36)
  cat("\nPsi-weights (MA(inf))\n")
  cat("\n--------------------\n")
  print(psis[1:20])
  
  #Model expressed as an AR infinity (pi-weights)
  pis=-ARMAtoMA(ar=-model$model$theta,ma=-model$model$phi,lag.max=36)
  names(pis)=paste("pi",1:36)
  cat("\nPi-weights (AR(inf))\n")
  cat("\n--------------------\n")
  print(pis[1:20])
  
  ##Shapiro-Wilks Normality test
  print(shapiro.test(resid(mod)))
  
  #Sample ACF vs. Teoric ACF
  par(mfrow=c(2,2),mar=c(3,3,3,3))
  acf(dades, ylim=c(-1,1) ,lag.max=36,main="Sample ACF")
  
  plot(ARMAacf(model$model$phi,model$model$theta,lag.max=36),ylim=c(-1,1), 
       type="h",xlab="Lag",  ylab="", main="ACF Teoric")
  abline(h=0)
  
  #Sample PACF vs. Teoric PACF
  pacf(dades, ylim=c(-1,1) ,lag.max=36,main="Sample PACF")
  
  plot(ARMAacf(model$model$phi,model$model$theta,lag.max=36, pacf=T),ylim=c(-1,1),
       type="h", xlab="Lag", ylab="", main="PACF Teoric")
  abline(h=0)
  par(mfrow=c(1,1))
}
validation(mod, d1d12serie)

## 
## --------------------------------------------------------------------
## 
## Call:
## arima(x = log_fatalities, order = c(0, 1, 3), seasonal = list(order = c(2, 1, 
##     0), period = 12))
## 
## Coefficients:
##           ma1      ma2      ma3     sar1     sar2
##       -0.7172  -0.0226  -0.0365  -0.7736  -0.2057
## s.e.   0.0757   0.0952   0.0763   0.0748   0.0723
## 
## sigma^2 estimated as 0.2285:  log likelihood = -126.03,  aic = 264.07
## 
## Modul of AR Characteristic polynomial Roots:  1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 1.068106 
## 
## Modul of MA Characteristic polynomial Roots:  1.246658 4.68529 4.68529 
## 
## Psi-weights (MA(inf))
## 
## --------------------
##       psi 1       psi 2       psi 3       psi 4       psi 5       psi 6 
## -0.71719513 -0.02258780 -0.03654094  0.00000000  0.00000000  0.00000000 
##       psi 7       psi 8       psi 9      psi 10      psi 11      psi 12 
##  0.00000000  0.00000000  0.00000000  0.00000000  0.00000000 -0.77361069 
##      psi 13      psi 14      psi 15      psi 16      psi 17      psi 18 
##  0.55482982  0.01747416  0.02826846  0.00000000  0.00000000  0.00000000 
##      psi 19      psi 20 
##  0.00000000  0.00000000 
## 
## Pi-weights (AR(inf))
## 
## --------------------
##        pi 1        pi 2        pi 3        pi 4        pi 5        pi 6 
## -0.71719513 -0.53695665 -0.43784349 -0.35235487 -0.28221802 -0.22636352 
##        pi 7        pi 8        pi 9       pi 10       pi 11       pi 12 
## -0.18159688 -0.14566596 -0.11684433 -0.09372617 -0.07518198 -0.83391751 
##       pi 13       pi 14       pi 15       pi 16       pi 17       pi 18 
## -0.60320462 -0.45419899 -0.36984650 -0.29755312 -0.23835453 -0.19118231 
##       pi 19       pi 20 
## -0.15337180 -0.12302559 
## 
##  Shapiro-Wilk normality test
## 
## data:  resid(mod)
## W = 0.97226, p-value = 0.0007372