Las librerías y paquetes necesarios para la ejecución del análisis son las siguientes:

library(dygraphs)
library(readxl)
library(tseries) #Modelos Arma y prueba Dickey-Fuller
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(lmtest) #Análsis de los coeficientes ARIMA
## Warning: package 'lmtest' was built under R version 4.2.3
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
Índice_de_residencia <- read_excel("Índice de residencia.xlsx")

Datos utilizados. Fuente: Banxico

Los datos utilizados son el índice de inversión fija bruta en construcción residencial. El periodo de tiempo que abarca es de 2005 a 2020.

# Convertimos los datos a una serie de tiempo.
rsdn = Índice_de_residencia
rsdn_ts = ts(rsdn, start = c(2005,1), frequency = 12)

Presencia de tendencias en la serie de tiempo

Se espera que una serie de tiempo estcionaria se mantenga constante en el tiempo. Es decir, que no se observen patrones ni tendencias, por lo que las pruebas visuales son fundamentales para evaluar su comportamiento. En la Gráfica 1 no se aprecia un patrón claro, ni una tendencia evidente. Sin embargo, a partir de 2014 se observa un crecimiento contínuo de la serie.

# Realizamos distintas gráficas para visualizar el comportamiento de los datos y poder comprobar si son estacionarios.
### Gráfica de serie de tiempo
rsdn_tsg = dygraph(rsdn_ts, main = "Índice de inversión en construcción residencial (2005 - 2020)", xlab = "Año", ylab = "Índice")%>% dyRangeSelector()
dyOptions(rsdn_tsg, colors = c("purple", "red"), fillGraph = TRUE, drawPoints = TRUE, pointSize = 2, strokeWidth = 2)

Prueba gráfica 1: histograma

En el histograma no se puede apreciar una distribución normal, además de que la media se localiza hacia la derecha. No se puede percibir un sesgo positivo ni negativo, aunque hay una caída brusca hacia la izquierda. En el centro hay una especie de planicie.

# Graficamos un histograma
hist(rsdn_ts, main = "Índice de inversión en construcción residencial (2005 - 2020)")

Prueba gráfica 2: gráfico de densidad

El gráfico de densidad nos indica que hay un cierto grado de heterogeneidad en los datos, puesto que hay dos prominencias. Debido a esto, la distribución no se aprecia como una normal.

# Hacemos un gráfico de densidad.
density = plot(density(rsdn_ts), main = "Índice de inversión en construcción residencial (2005 - 2020)")

Prueba gráfica 3: qqplot

Podemos observar que una gran candidad de datos se concentra cerca de la línea de normalidad, sin embargo los extremos no parecen apegarse a la línea. El gráfico qqplot tampoco denota normalidad a simple vista, lo que podría indicar que la serie no es estacionaria.

# Hacemos un gráfico qqplot
qqnorm(rsdn_ts)
qqline(rsdn_ts)

Prueba gráfica 4: primeras y segundas diferencias

En las gráficas de puede apreciar claramente que la primera y segunda diferencia presentan menos tendencias y patrones que la serie original. Esto podría indicar que el modelo por diferencias podría ser más adecuado pues parece tener una media y varianza consantes.

# Ahora graficamos la serie de tiempo original y la primera y segunda diferencia.
par(mfrow=c(2,2))
plot(diff(rsdn_ts), type = "l", main = "Primera diferencia")
plot(diff(diff(rsdn_ts)), type = "l", main = "Segunda diferencia")
plot(rsdn_ts, type = "l", main = "Serie de tiempo original")

Prueba Dickey - Fuller fallida

La prueba de Dickey-Fuller es una herramienta estadística utilizada para determinar si una serie de tiempo es estacionaria o no. La estacionariedad se refiere a que la media, la varianza y la autocorrelación de la serie de tiempo son constantes en el tiempo. Dado que el estadístico de prueba no es menor al valor crítico, se concluye que los datos no son estacionarios.

# Realizamos una prueba estadística para saber si los datos son estacionarios.
#H0:La serie es no estacionaria: tiene raíz unitaria
#H1:La serie es estacionaria: no tiene raíz unitaria
adf.test(rsdn_ts) #pvalue=0.2134 NO ESTACIONARIA
## 
##  Augmented Dickey-Fuller Test
## 
## data:  rsdn_ts
## Dickey-Fuller = -3.0151, Lag order = 5, p-value = 0.1519
## alternative hypothesis: stationary
#pvalue<=0.05 rechazo Ho
#pvalue> 0.05 acepto Ho

Gráfica de autocorrelación

En este apartado realizamos pruebas de autocorrelación para dterminar si lo más correcto es utilizar un modelo MA1 o AR1. La gráfica de ACF muestra la correlación entre una observación en una serie temporal y su retraso, para diferentes retrasos en el tiempo. Observamos que los datos decrecen al infinito, sin embargo lo hacen por encima de las líneas del gráfico, por lo que el modelo no es adecuado ni para AR o MA. En el gráfico de autocorrelación parcial, se observa que los tres primeros datos están correlacionados, por lo que este no coincide con un modelo AR1, en el que el primero es significativamente más grande y los demás decrecen sustancialmente.

# Graficamos una ACF y PACF.
acf(rsdn_ts,main="Índice de inversión en construcción residencial ACF")$acf

## , , 1
## 
##             [,1]
##  [1,] 1.00000000
##  [2,] 0.63864695
##  [3,] 0.59441919
##  [4,] 0.56755811
##  [5,] 0.46916655
##  [6,] 0.46168937
##  [7,] 0.41651854
##  [8,] 0.42350290
##  [9,] 0.30849806
## [10,] 0.34740819
## [11,] 0.30921623
## [12,] 0.22686425
## [13,] 0.34412044
## [14,] 0.21349827
## [15,] 0.18530562
## [16,] 0.20506050
## [17,] 0.13986225
## [18,] 0.15042046
## [19,] 0.10614492
## [20,] 0.18184548
## [21,] 0.07616669
## [22,] 0.11183402
## [23,] 0.08513407
pacf(rsdn_ts,main="Índice de inversión en construcción residencial PACF")

Cambio a primeras diferencias y prueba Dickey - Fuller

Dado que los datos anteriores no mostraron ser estacionarios, ahora se procede a calcular las primeras diferencias para posteriormente aplicar de nuevo la prueba Dickey-Fuller. Tal como se observa en la prueba, los datos ahora sí son estacionarios, dado que el estadístico de prueba es menor al valor crítico, por lo que se procede a la estimación del modelo. Anteriormente ya se graficaron las primeras y segundas diferencias, puediendo observar que presentaban menos patrones y tendencias.

En las gráficas del ACF y PACF se observa que los datos tienen un comportamiento más estacionario,dado que en la gráfica ACF se observa ahora que el primer dato tiene una correlación significativamente mayor que los demás, aunque aún hay datos que rebasan las líneas superiores e inferiores.Sin embargo, después del primer dato, los demás no decrecen a cero, que es un rasgo de estacionareidad. Las pruebas gráficas para la primera diferencia son inconclusas, pero el test Dickey-Fuller indica datos estacionarios por lo que se procede a la estimación del modelo.

# Ahora se calculan las primeras diferencias y se almacenan en una nueva variable.
rsdn_ts_dif = diff(rsdn_ts)
# En segundo lugar se aplica de nuevo el test Dickey-Fuller.
adf.test(rsdn_ts_dif)
## Warning in adf.test(rsdn_ts_dif): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  rsdn_ts_dif
## Dickey-Fuller = -7.9028, Lag order = 5, p-value = 0.01
## alternative hypothesis: stationary
# En tercer lugar graficamos la ACF y PACF para la serie de tiempo con primeras diferencias y observamos su comportamiento.
boxplot(rsdn_ts_dif,horizontal = TRUE)

acf(rsdn_ts_dif,main="Índice de inversión en construcción residencial ACF en primera diferencia")$acf

## , , 1
## 
##              [,1]
##  [1,]  1.00000000
##  [2,] -0.45115696
##  [3,] -0.01892595
##  [4,]  0.10949533
##  [5,] -0.13756637
##  [6,]  0.05359479
##  [7,] -0.07529687
##  [8,]  0.16867853
##  [9,] -0.21099281
## [10,]  0.10276574
## [11,]  0.06062137
## [12,] -0.28665040
## [13,]  0.35006129
## [14,] -0.13632250
## [15,] -0.04799627
## [16,]  0.10964296
## [17,] -0.10620795
## [18,]  0.08154105
## [19,] -0.17473608
## [20,]  0.25913595
## [21,] -0.19858390
## [22,]  0.08717181
## [23,]  0.03568926
pacf(rsdn_ts_dif,main="Índice de inversión en construcción residencial PACF en primera diferencia")

Elección de modelo: MA(2) con una diferencia

Para un modelo AR, el gráfico de PACF la correlación debe ser significativa solo en el primer retraso y luego disminuye a cero. En el caso de un modelo MA, la correlación es significativa solo en el primer retraso y en algunos otros retrasos consecutivos, pero no en retrasos intermedios. En el caso de de la serie de tiempo evaluada, no se ajusta exactamente a ninguno de los dos, sin embargo, un modelo MA (2) parece ser más adecuado debido a que los primeros dos datos son los más significativos y algunos de los consecutivos también presentan altos niveles de correlación. Además, no se observa que la correlación decaiga a partir de los primeros dos datos.De esta manera se escoge el modelo MA(2) con una diferencia. La comparación de los distintos modelos se realizó utilizando la siguiente tabal comparativa:

ARIMA

Aplicación del modelo

Al aplicar el modelo ARIMA

# Procedemos a estimar el modelo MA (2) con una diferencia. Es decir, un ARIMA(0,1,2)
#Modelo MA2
MA2<-arima(rsdn_ts,c(0,1,2))
MA2_1 = arima(rsdn_ts, c(0,1,1))
summary(MA2)
##           Length Class  Mode     
## coef        2    -none- numeric  
## sigma2      1    -none- numeric  
## var.coef    4    -none- numeric  
## mask        2    -none- logical  
## loglik      1    -none- numeric  
## aic         1    -none- numeric  
## arma        7    -none- numeric  
## residuals 181    ts     numeric  
## call        3    -none- call     
## series      1    -none- character
## code        1    -none- numeric  
## n.cond      1    -none- numeric  
## nobs        1    -none- numeric  
## model      10    -none- list
summary(MA2_1)
##           Length Class  Mode     
## coef        1    -none- numeric  
## sigma2      1    -none- numeric  
## var.coef    1    -none- numeric  
## mask        1    -none- logical  
## loglik      1    -none- numeric  
## aic         1    -none- numeric  
## arma        7    -none- numeric  
## residuals 181    ts     numeric  
## call        3    -none- call     
## series      1    -none- character
## code        1    -none- numeric  
## n.cond      1    -none- numeric  
## nobs        1    -none- numeric  
## model      10    -none- list
coeftest(MA2)#No se utiliza la función autoarima debido a que al modificar el modelo, su único coeficiente fue significativo.
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value Pr(>|z|)    
## ma1 -0.620081   0.073314 -8.4579   <2e-16 ***
## ma2 -0.022036   0.081528 -0.2703   0.7869    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
coeftest(MA2_1)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ma1 -0.629929   0.064708  -9.735 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

De acuerdo con la evaluación del modelo, al coeficiente ma2 no es significativo, por lo que se elimina del modelo. Al transformar el modelo de MA(2) a MA(1), se observa que el coeficiente ma1 es significativa, por lo que se considera que este es el modelo adecuado. Ahora se procede a realizar un análisis de los residuos.

Análisis de los residuos: pruebas gráficas y Shapiro-Wilk test

Si los valores de ACF y PACF caen rápidamente a cero después de los primeros lags, es una indicación de que no hay autocorrelación en los residuos. En otras palabras, si los residuos no están correlacionados con valores anteriores, esto sugiere que el modelo puede ser una buena aproximación para los datos. En el gráfico de los residuales se puede observar que el primer lag tiene una correlación significativa, mientras que en los subsecuentes esta correlación disminuye, aunque existen tres lags que rebasan las bandas azules. En la prueba de los residuales al cuadrado, tanto en la prueba de autocorrelación simple como en la parcial, únicamente dos lags presentan una correlación significativa mayor a cero, que está por encima de las bandas.

Si el p-valor es mayor que el nivel de significancia elegido (generalmente 0.05), no hay suficiente evidencia para rechazar la hipótesis nula y se concluye que la muestra sigue una distribución normal. En este caso, el test Shapiro-Wilk arrojó un p-value de 0.47, por lo que los datos se denotan normalidad.

#Pruebas a los Residuales del mejor modelo
RE<-residuals(MA2_1)
par(mfrow=c(1,2))
acf(RE,main='ACF Residuales de MA(1) con una diferencia',xlab='Retardos')
pacf(RE,main='PACF Residuales de MA(1) con una diferencia',xlab='Retardos')

#Pruebas a los Residuales al cuadrado del mejor modelo
RE2<-RE^2
#par(mfrow=c(1,2))
acf(RE2,main='ACF Residuales de MA (2) con una diferencia al cuadrado',xlab='Retardos')
pacf(RE2,main='PACF Residuales de MA (2) con una diferencia cuadrado',xlab='Retardos')

# Realizamos la prueba de normalidad Shapiro Wilk test
#H0:La distribución es normal
#H1:La distribución no es normal
shapiro.test(RE)  
## 
##  Shapiro-Wilk normality test
## 
## data:  RE
## W = 0.99248, p-value = 0.4746
#pvalue<=0.05 rechazo Ho
#pvalue> 0.05 acepto Ho
#Buscamos valores más grandes a 0.05 en el pvalue para 
#Afirmar que los residuos provienen de una distribución normal
##supuestos del error: ho= ruido balco; h1: los errores cuadrados estan relacioandos
Box.test(RE,1,type="Ljung") # VERIFICA QUE LOS RESIDUOS SE COMPORTAN COMO RUIDO BLANCO
## 
##  Box-Ljung test
## 
## data:  RE
## X-squared = 0.00796, df = 1, p-value = 0.9289
Box.test(RE2,1,type="Ljung")
## 
##  Box-Ljung test
## 
## data:  RE2
## X-squared = 1.9756, df = 1, p-value = 0.1599

Conclusiones

La conclusión del modelo econométrico es que la utilización de las primeras diferencias permitió obtener datos estacionarios, lo que sugiere que el modelo es adecuado para el análisis. Además, el hecho de que el modelo haya pasado la prueba Dickey Fuller también respalda la idea de que los datos son estacionarios.

Sin embargo, el análisis de residuos reveló que había autocorrelación en varios lags, lo que indica que el modelo no es perfecto y puede necesitar ajustes adicionales. En este caso, se decidió escoger un modelo MA(1), en el que el coeficiente “ma1” es significativo y negativo. Esto sugiere que la serie de tiempo está influenciada por un único valor de retraso, y que las fluctuaciones en los datos son impulsadas por un choque aleatorio pasado.

En resumen, se puede concluir que el modelo econométrico es adecuado para el análisis, aunque puede haber algunas limitaciones en cuanto a la autocorrelación de los residuos como demostró la prueba gráfica. En cuanto a la prueba estadística Shapiro, los resultados indicaron normalidad en los residuos. El modelo MA(1) parece ser una buena opción para explicar los datos, aunque es importante tener en cuenta que aún pueden existir otras variables y factores no considerados en el modelo que puedan influir en la serie de tiempo.