library(vars)
library(fpp2)
install.packages("TSA")
library(TSA)
#Cargar datos
series<-uschange
autoplot(uschange[,c(3,5)])
series
#plot de serie de datos
ts.plot(series[,c(3,5)], xlab="Tiempo",col=c(1,2))
#Búsqueda de parámetros
a <- VARselect(uschange[,c(3,5)], lag.max=15,type="const")
a$selection
#Creación de modelo
modelo1<-VAR(uschange[,c(3,5)],p=10,type=c("const"))

modelo_s<-summary(modelo1)
modelo_s
#si no pasan de 1, el modelo es estacionario
modelo_s$roots

summary(modelo1,equation="Consumption")
summary(modelo1,equation="Income")

#Validación del modelo
#>PortManteu Test > 0.05 Autocorrelación
serial.test(modelo1, lags.pt=10, type="PT.asymptotic")
#Raíz unitaria < 1
roots(modelo1)
#normalidad Jarque Bera < 0.05
normality.test(modelo1, multivariate.only=FALSE)
#heteroscedasticity >0.05 NO HAY
arch<-arch.test(modelo1, lags.multi = 12, multivariate.only = FALSE)
arch
#Structural breaks
stab<-stability(modelo1, type = "OLS-CUSUM")
par(mar=c(1,1,1,1))
plot(stab)

#BoxCox.ar(abs(uschange[,2]))

#Causalidad de granger
#granger < 0.05 para que exista causalidad

GrangerIncome <-causality(modelo1, cause = 'Production')
GrangerIncome
GrangerConsumptions <-causality(modelo1, cause = 'Unemployment')
GrangerConsumptions


#Respuesta de impulso
#Como se comporta una variable si la otra variable recibe un "shock"
IncomeIRF <- irf(modelo1,  impulse = "Unemployment", response="Production", n.ahead = 20, boot = T )
plot(IncomeIRF, ylab = "Production", main = "Shock desde Consumptions")

ConsumptionIRF <- irf(modelo1,  impulse = "Production", response="Unemployment", n.ahead = 20, boot = T )
plot(ConsumptionIRF, ylab = "Employment", main = "Shock desde Income")
#Descomposición de la varianza
FEVD1 <- fevd(modelo1, n.ahead = 10)
plot(FEVD1)

#prediccion

fore<-predict(modelo1, n.ahead = 10, ci=0.95)
fanchart(fore)
autoplot(forecast(modelo1))



#Formula
modelo1$varresult$Production$coefficients
modelo1$varresult$Unemployment$coefficients

autoplot(forecast(modelo1))