Examen Teorico

Conteste las siguientes preguntas en un archivo de RMarkdown y de ser posible ilustre los términos solicitados:

• ¿Cuál es el objetivo del curso de Econometría 2? El objetivo del curso es explicar la importancia de la econometria, las ecuaciuones en diferencia, los operadores de rezago, la estacionariedad y la prueba de Dickey -Fuller; por medio de la utlizacion de los modelos ARIMA, la funcion de autocorrelacion y la metodologia de Box & Jenkins y de igual manera utilizando los mnodelos de vectores autorregresivos y sus pruebas. Tambien otro de los objetivos es la aplicacion de los diferentes modelos de cointegracion y de correccion de error y la aplicacion del metodo de extraccion de señales, la definicion de componentes de una serie de tiempo y de los diferentes metodos.

• ¿Cuál es el fin de la utilización de series temporales? Las series temporales tienen el fin de hacer un analisis y una prediccion de patrones en los datos que tienen un cambio en el tiempo. Unos de las aplicaciones que se utilizan con mayor frecuencua en las series temporales son los siguientes:

- Pronostico: Predice valores futuros de una serie temporal basandose en patrones pasados.

- Deteccion de anomalias: Se identifican los puntos que estan fuera de lo normal en una serie temporal que pueden indicar problemas o eventos no esperados.

- Analisis de tendencias: Analiza los patrones a largo plazo para asi identificar tendencias a lo largo de tiempo en una serie temporal.

- Modelado causal: Se identifican y cuantifican las relaciones entre las variables que hay en una serie temporal.

• ¿En qué casos recomienda utilizar un modelo ARIMA? Un modelo ARIMA se recomienda utilizar para un analisis y una prediccion en la que hay series de tiempo como por ejemplo en: pronostico de ventas o demanda, analisis de precios, analisis de satos economicos y en analisis de datos cientificos. El modelo ARIMA es una buena opcion cuando se quiere analizar datos en series de tiempo que muestran patrones estacionales o tendencias, tambien una de las cosas que afecta mucho es la calidad de los datos que estan disponibles para hacer el modelo.

• ¿En qué casos recomienda utilizar un modelo VAR? El modelo VAR se recomienda usarlo en analisis o predicciones que hay entre varias variables que cambien en lo largo del tiempo, aqui hay unos casos en los que se recomienta utilizar un modelo VAR: analisis de datos macroeconomicos, anailis de datos financieros, analisis de datos de mercados. Tambien la utilizacion de este modelo depende de la calidad de los datos y la cantidad de datos que hay dispobibles.

• Explique los pasos de validación del modelo posteriores a la selección del modelo óptimo. Luego de que se selecciono un modelo optimo se debe de validar dicho modelo para asi evaluar su capacidad de generalizacion y de esa manera se asegura que no hay un sobreajuste con los datos nde entrenamiento y luego se siguen los soguientes pasos para la validacion del modelo:

- Conjunto de datos de prueba

- Evaluacion de la precision

- Ajuste de hiperparametros

- Validacion cruzada

- Pruebas de significancia estadistica

- Analisis de errores

- Implementacion

• ¿Qué pasos realiza si la validación de su modelo resulta negativa? Si el modelo no alcanza el rendimiento que se esperaba o es negativo se pueden seguir varios pasos para mejorar el rendimiento del modelo como los siguientes:

- Revisar los datos de entrenamiento

- Ajustar los hiperparametros

- Cambiar la estructura del modelo

- Aumentar la cantidad de datos y variables

- Hacer una depuracion del modelo

- Probar distintos algoritmos de aprendizaje automatico

Examen Practico

En el archivo de RMarkdown generado, resuelva los siguientes ejercicios, comente los pasos seguidos y explique el código que considere necesario.

Se evaluará el nivel de exactitud de la predicción en el caso donde aplique, además de las técnicas utilizadas.

• Utilizando los datos prision de la librería fpp2, utilice dos columnas para generar dos modelos de ARIMA y realice una predicción de dos años.

Columna 1

library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(seasonal)
library(tseries)
library(readxl)
library(fpp2)
## ── Attaching packages ────────────────────────────────────────────── fpp2 2.5 ──
## ✔ ggplot2   3.4.1     ✔ expsmooth 2.3  
## ✔ fma       2.5
## 
data <- prison 

data("prison")
series <- data[,10]
autoplot(series)

head(series)
##      Qtr1 Qtr2 Qtr3 Qtr4
## 2005   12   18   16   16
## 2006   17   20
#ACTFSentenced 
model1 <- auto.arima(series, seasonal = FALSE)
summary(model1)
## Series: series 
## ARIMA(0,1,0) with drift 
## 
## Coefficients:
##        drift
##       1.3830
## s.e.  0.8724
## 
## sigma^2 = 36.55:  log likelihood = -150.75
## AIC=305.5   AICc=305.77   BIC=309.2
## 
## Training set error measures:
##                        ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 0.0002211878 5.918028 3.978945 -0.3772372 7.806901 0.4312157
##                    ACF1
## Training set -0.1201545
#Prueba de Dickey-Fuller
plot(series)

tseries::adf.test(series)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series
## Dickey-Fuller = -2.6857, Lag order = 3, p-value = 0.3003
## alternative hypothesis: stationary
#Primera Diferenciación
diff_ts<-diff(series)
tseries::adf.test(diff_ts)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_ts
## Dickey-Fuller = -3.1189, Lag order = 3, p-value = 0.1282
## alternative hypothesis: stationary
plot(diff_ts)

#Segunda Diferenciación
diff2<-diff(diff_ts)
tseries::adf.test(diff2)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff2
## Dickey-Fuller = -3.7535, Lag order = 3, p-value = 0.03117
## alternative hypothesis: stationary
plot(diff2)

ts <- diff_ts

acf(ts)

pacf(ts)

auto.arima(ts)
## Series: ts 
## ARIMA(1,0,0)(1,0,0)[4] with non-zero mean 
## 
## Coefficients:
##           ar1     sar1    mean
##       -0.3066  -0.4308  1.6553
## s.e.   0.1587   0.1899  0.4598
## 
## sigma^2 = 33.66:  log likelihood = -148.23
## AIC=304.46   AICc=305.41   BIC=311.86
#Escoger modelo
modelo1 = Arima(ts, order=c(0,1,1))
modelo2 = Arima(ts, order=c(0,1,2))
modelo3 = Arima(ts, order=c(1,1,1))

summary(modelo1)
## Series: ts 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -1.0000
## s.e.   0.0694
## 
## sigma^2 = 37.36:  log likelihood = -149.96
## AIC=303.93   AICc=304.21   BIC=307.58
## 
## Training set error measures:
##                      ME     RMSE      MAE  MPE MAPE      MASE       ACF1
## Training set -0.2697015 5.980656 4.006334 -Inf  Inf 0.6782377 -0.1092018
summary(modelo2)
## Series: ts 
## ARIMA(0,1,2) 
## 
## Coefficients:
##           ma1     ma2
##       -1.0747  0.0747
## s.e.   0.1479  0.1285
## 
## sigma^2 = 37.8:  log likelihood = -149.79
## AIC=305.59   AICc=306.16   BIC=311.07
## 
## Training set error measures:
##                      ME     RMSE      MAE  MPE MAPE      MASE        ACF1
## Training set -0.2509152 5.948478 4.000359 -Inf  Inf 0.6772262 -0.02479518
summary(modelo3)
## Series: ts 
## ARIMA(1,1,1) 
## 
## Coefficients:
##           ar1      ma1
##       -0.1020  -1.0000
## s.e.   0.1483   0.0748
## 
## sigma^2 = 37.66:  log likelihood = -149.73
## AIC=305.46   AICc=306.03   BIC=310.94
## 
## Training set error measures:
##                      ME     RMSE      MAE  MPE MAPE     MASE        ACF1
## Training set -0.2455644 5.937367 3.994274 -Inf  Inf 0.676196 0.006996485
modelo1$aic
## [1] 303.9265
modelo2$aic
## [1] 305.5872
modelo3$aic
## [1] 305.4589
checkresiduals(modelo1$residuals)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

Box.test(modelo1$residuals, type="Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  modelo1$residuals
## X-squared = 0.59703, df = 1, p-value = 0.4397
a<-forecast::forecast(modelo1)
plot(a)

Estos serian los resultados de la columna 1, los cuales se pueden ver que van a tener un tendencia creciente para los proximos años.

Columna 2

data <- prison 

data("prison")
series <- data[,8]
autoplot(series)

head(series)
##      Qtr1 Qtr2 Qtr3 Qtr4
## 2005 6396 6472 6540 6502
## 2006 6493 6594
#ACTFSentenced 
model1 <- auto.arima(series, seasonal = FALSE)
summary(model1)
## Series: series 
## ARIMA(0,1,0) with drift 
## 
## Coefficients:
##         drift
##       32.4043
## s.e.  16.3651
## 
## sigma^2 = 12862:  log likelihood = -288.54
## AIC=581.08   AICc=581.35   BIC=584.78
## 
## Training set error measures:
##                     ME     RMSE      MAE         MPE     MAPE      MASE
## Training set 0.1325748 111.0225 85.44552 -0.02460637 1.224811 0.3721274
##                    ACF1
## Training set 0.03916495
#Prueba de Dickey-Fuller
plot(series)

tseries::adf.test(series)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series
## Dickey-Fuller = -0.87961, Lag order = 3, p-value = 0.9472
## alternative hypothesis: stationary
#Primera Diferenciación
diff_ts<-diff(series)
tseries::adf.test(diff_ts)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_ts
## Dickey-Fuller = -1.9097, Lag order = 3, p-value = 0.61
## alternative hypothesis: stationary
plot(diff_ts)

#Segunda Diferenciación
diff2<-diff(diff_ts)
tseries::adf.test(diff2)
## Warning in tseries::adf.test(diff2): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff2
## Dickey-Fuller = -4.9193, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary
plot(diff2)

ts <- diff_ts

acf(ts)

pacf(ts)

auto.arima(ts)
## Series: ts 
## ARIMA(2,0,0)(2,1,0)[4] 
## 
## Coefficients:
##          ar1     ar2     sar1     sar2
##       0.2443  0.2815  -0.6730  -0.3066
## s.e.  0.1527  0.1543   0.1583   0.1611
## 
## sigma^2 = 10585:  log likelihood = -259.16
## AIC=528.32   AICc=529.94   BIC=537.12
#Escoger modelo
modelo1 = Arima(ts, order=c(0,1,1))
modelo2 = Arima(ts, order=c(0,1,2))
modelo3 = Arima(ts, order=c(1,1,1))

summary(modelo1)
## Series: ts 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -0.8733
## s.e.   0.1143
## 
## sigma^2 = 13631:  log likelihood = -284.45
## AIC=572.89   AICc=573.17   BIC=576.55
## 
## Training set error measures:
##                    ME     RMSE      MAE      MPE     MAPE      MASE        ACF1
## Training set 3.294237 114.2416 85.25459 146.2851 251.1857 0.9062911 -0.05340998
summary(modelo2)
## Series: ts 
## ARIMA(0,1,2) 
## 
## Coefficients:
##           ma1     ma2
##       -0.9073  0.0656
## s.e.   0.1504  0.1873
## 
## sigma^2 = 13945:  log likelihood = -284.38
## AIC=574.77   AICc=575.34   BIC=580.25
## 
## Training set error measures:
##                    ME     RMSE      MAE    MPE     MAPE      MASE        ACF1
## Training set 2.614868 114.2573 85.07917 139.19 236.9604 0.9044263 -0.01585424
summary(modelo3)
## Series: ts 
## ARIMA(1,1,1) 
## 
## Coefficients:
##           ar1      ma1
##       -0.0724  -0.8344
## s.e.   0.1991   0.1547
## 
## sigma^2 = 13940:  log likelihood = -284.38
## AIC=574.77   AICc=575.34   BIC=580.25
## 
## Training set error measures:
##                    ME     RMSE      MAE      MPE    MAPE      MASE        ACF1
## Training set 2.700269 114.2384 85.03747 138.1779 235.145 0.9039829 -0.01582938
modelo1$aic
## [1] 572.8948
modelo2$aic
## [1] 574.7684
modelo3$aic
## [1] 574.7683
checkresiduals(modelo1$residuals)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

Box.test(modelo1$residuals, type="Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  modelo1$residuals
## X-squared = 0.14282, df = 1, p-value = 0.7055
a<-forecast::forecast(modelo1)
plot(a)

Estos serian los resultados de la columna 2, los cuales se pueden ver que van a tener un tendencia creciente para los proximos años un poco menor al de la columna 1 pero siempre en aumento.

• Utilizando un modelo VAR, realice una predicción para las dos variables anteriores y genere una predicción de dos años.

library(vars)
## Loading required package: MASS
## 
## Attaching package: 'MASS'
## The following objects are masked from 'package:fma':
## 
##     cement, housing, petrol
## Loading required package: strucchange
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Loading required package: sandwich
## Loading required package: urca
## Loading required package: lmtest
library(fpp2)
library(TSA)
## Registered S3 methods overwritten by 'TSA':
##   method       from    
##   fitted.Arima forecast
##   plot.Arima   forecast
## 
## Attaching package: 'TSA'
## The following objects are masked from 'package:stats':
## 
##     acf, arima
## The following object is masked from 'package:utils':
## 
##     tar
#Cargar datos

data <- prison 

data("prison")
series <- data

autoplot(data[,c(8,10)])

#plot de serie de datos
ts.plot(series[,8:10], xlab="Tiempo",col=c(1,2))

#Búsqueda de parámetros
a <- VARselect(data[,8:10], lag.max=15,type="const")
## Warning in log(sigma.det): NaNs produced

## Warning in log(sigma.det): NaNs produced

## Warning in log(sigma.det): NaNs produced
a$selection
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##     11     11     11     10
#Creación de modelo
modelo1<-VAR(data[,8:10],p=1,type=c("const"))

modelo_s<-summary(modelo1)

#si no pasan de 1, el modelo es estacionario
modelo_s$roots
## [1] 0.9767206 0.9767206 0.2559392
summary(modelo1,equation="NSWMSentenced")
## 
## VAR Estimation Results:
## ========================= 
## Endogenous variables: NSWMSentenced, NT.FRemanded., NT.FSentenced 
## Deterministic variables: const 
## Sample size: 47 
## Log Likelihood: -562.939 
## Roots of the characteristic polynomial:
## 0.9767 0.9767 0.2559
## Call:
## VAR(y = data[, 8:10], p = 1, type = c("const"))
## 
## 
## Estimation results for equation NSWMSentenced: 
## ============================================== 
## NSWMSentenced = NSWMSentenced.l1 + NT.FRemanded..l1 + NT.FSentenced.l1 + const 
## 
##                  Estimate Std. Error t value Pr(>|t|)    
## NSWMSentenced.l1   0.9100     0.0579  15.717   <2e-16 ***
## NT.FRemanded..l1   5.9897     3.1673   1.891   0.0654 .  
## NT.FSentenced.l1  -1.0262     1.8913  -0.543   0.5902    
## const            566.9656   370.5847   1.530   0.1334    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 106 on 43 degrees of freedom
## Multiple R-Squared: 0.9392,  Adjusted R-squared: 0.9349 
## F-statistic: 221.2 on 3 and 43 DF,  p-value: < 2.2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##               NSWMSentenced NT.FRemanded. NT.FSentenced
## NSWMSentenced      11236.00        -24.92         85.98
## NT.FRemanded.        -24.92         20.18          6.65
## NT.FSentenced         85.98          6.65         32.33
## 
## Correlation matrix of residuals:
##               NSWMSentenced NT.FRemanded. NT.FSentenced
## NSWMSentenced       1.00000      -0.05234        0.1427
## NT.FRemanded.      -0.05234       1.00000        0.2604
## NT.FSentenced       0.14265       0.26035        1.0000
summary(modelo1,equation="NTFRemanded ")
## Warning in summary.varest(modelo1, equation = "NTFRemanded "): 
## Invalid variable name(s) supplied, using first variable.
## 
## VAR Estimation Results:
## ========================= 
## Endogenous variables: NSWMSentenced, NT.FRemanded., NT.FSentenced 
## Deterministic variables: const 
## Sample size: 47 
## Log Likelihood: -562.939 
## Roots of the characteristic polynomial:
## 0.9767 0.9767 0.2559
## Call:
## VAR(y = data[, 8:10], p = 1, type = c("const"))
## 
## 
## Estimation results for equation NSWMSentenced: 
## ============================================== 
## NSWMSentenced = NSWMSentenced.l1 + NT.FRemanded..l1 + NT.FSentenced.l1 + const 
## 
##                  Estimate Std. Error t value Pr(>|t|)    
## NSWMSentenced.l1   0.9100     0.0579  15.717   <2e-16 ***
## NT.FRemanded..l1   5.9897     3.1673   1.891   0.0654 .  
## NT.FSentenced.l1  -1.0262     1.8913  -0.543   0.5902    
## const            566.9656   370.5847   1.530   0.1334    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 106 on 43 degrees of freedom
## Multiple R-Squared: 0.9392,  Adjusted R-squared: 0.9349 
## F-statistic: 221.2 on 3 and 43 DF,  p-value: < 2.2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##               NSWMSentenced NT.FRemanded. NT.FSentenced
## NSWMSentenced      11236.00        -24.92         85.98
## NT.FRemanded.        -24.92         20.18          6.65
## NT.FSentenced         85.98          6.65         32.33
## 
## Correlation matrix of residuals:
##               NSWMSentenced NT.FRemanded. NT.FSentenced
## NSWMSentenced       1.00000      -0.05234        0.1427
## NT.FRemanded.      -0.05234       1.00000        0.2604
## NT.FSentenced       0.14265       0.26035        1.0000
#Validación del modelo
#>PortManteu Test > 0.05 Autocorrelación
serial.test(modelo1, lags.pt=10, type="PT.asymptotic")
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object modelo1
## Chi-squared = 95.529, df = 81, p-value = 0.129
#Raíz unitaria < 1
roots(modelo1)
## [1] 0.9767206 0.9767206 0.2559392
#normalidad Jarque Bera < 0.05
normality.test(modelo1, multivariate.only=FALSE)
## $NSWMSentenced
## 
##  JB-Test (univariate)
## 
## data:  Residual of NSWMSentenced equation
## Chi-squared = 0.70973, df = 2, p-value = 0.7013
## 
## 
## $NT.FRemanded.
## 
##  JB-Test (univariate)
## 
## data:  Residual of NT.FRemanded. equation
## Chi-squared = 6.4151, df = 2, p-value = 0.04046
## 
## 
## $NT.FSentenced
## 
##  JB-Test (univariate)
## 
## data:  Residual of NT.FSentenced equation
## Chi-squared = 19.966, df = 2, p-value = 4.618e-05
## 
## 
## $JB
## 
##  JB-Test (multivariate)
## 
## data:  Residuals of VAR object modelo1
## Chi-squared = 11.257, df = 6, p-value = 0.08076
## 
## 
## $Skewness
## 
##  Skewness only (multivariate)
## 
## data:  Residuals of VAR object modelo1
## Chi-squared = 4.5202, df = 3, p-value = 0.2105
## 
## 
## $Kurtosis
## 
##  Kurtosis only (multivariate)
## 
## data:  Residuals of VAR object modelo1
## Chi-squared = 6.7364, df = 3, p-value = 0.08079
#heteroscedasticity >0.05 NO HAY
arch<-arch.test(modelo1, lags.multi = 12, multivariate.only = FALSE)
arch
## $NSWMSentenced
## 
##  ARCH test (univariate)
## 
## data:  Residual of NSWMSentenced equation
## Chi-squared = 15.999, df = 16, p-value = 0.453
## 
## 
## $NT.FRemanded.
## 
##  ARCH test (univariate)
## 
## data:  Residual of NT.FRemanded. equation
## Chi-squared = 17.792, df = 16, p-value = 0.3362
## 
## 
## $NT.FSentenced
## 
##  ARCH test (univariate)
## 
## data:  Residual of NT.FSentenced equation
## Chi-squared = 25.586, df = 16, p-value = 0.06015
## 
## 
## 
##  ARCH (multivariate)
## 
## data:  Residuals of VAR object modelo1
## Chi-squared = 210, df = 432, p-value = 1
#Structural breaks
stab<-stability(modelo1, type = "OLS-CUSUM")
par(mar=c(1,1,1,1))
plot(stab)

#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)

#Formula
modelo1$varresult$Income$coefficients
## NULL
modelo1$varresult$Consumption$coefficients
## NULL
autoplot(forecast(modelo1))

Estos son los resultados de las dos variables que se analizaron en el problema anterior y como se puede ver con el modelo VAR es que las dos variables tienen una tendencia a bajar en los proximos dos años.

• Realice un comparativo de error para validar cual modelo es el óptimo para cada variable.

Lo que podemos observar es que en el modelo ARIMA se tiene que las dos variables tienen una prediccion que va a ir en aumento y lo que podemos observar es que en el modelo VAR las variables tienen una prediccion que en los siguientes dos años va a bajar y eso hace que se demuestre que los modelos son eficientes y confiables pero los dos son en diferentes enfoques y no van a ser lo mismo.