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.