class: center, middle, inverse, title-slide .title[ # Macroeconometría ] .subtitle[ ## Introducción a la Econometría de Series de Tiempo ] .author[ ### Mauricio Tejada ] .institute[ ### Universidad Alberto Hurtado ] --- layout: true <div class="my-footer"><img src="img/logo2.png" style="height: 35px;"/></div> --- class: separator-blue, middle # Introduction --- ## Introducción - La **macroeconometría** es el área de la econometría que se encarga de cuantificar empíricamente fenómenos macroeconómicos mediante el uso de series de tiempo. Es un importante componente de la investigación en economía. - El uso de **métodos de series temporales** en macroeconomía empírica se ha vuelto muy popular tanto en el mundo académico como en instituciones públicas y privadas. - Este curso tienen los siguientes **objetivos**: 1. Proporcionar a los estudiantes conocimiento de un conjunto de **métodos modernos** de series de tiempo necesarios para la investigación empírica en macroeconomía. 2. Presentar una variedad de **aplicaciones empíricas** en macroeconomía. - El curso tiene una **orientación empírica**. Aunque la teoría econométrica tendrá un papel central, se prestará especial atención a las aplicaciones y datos. --- ## Introducción - En gran parte del curso nos basaremos en el **método de mínimos cuadrados ordinarios o MCO** (estimación e inferencia), por lo que es importante recordar los conceptos de econometría I. - Los datos de series de tiempo cuentan con **ciertas características** (que no poseen aquellos de corte transversal) y exigen atención especial al aplicar MCO. - Los datos de series de tiempo son usados para **responder preguntas cuantitativas**, las cuáles pueden pertenecer a una de las siguientes áreas: 1. Análisis descriptivo: Ej. ¿Cuánto creció la variable `\(x\)`?. 2. Cuantificación de efectos causales dinámicos: Ej. ¿Cuál es el efecto causal sobre `\(y\)` de un cambio en `\(x\)` en el tiempo?. 3. Predicción: Ej. ¿Cuál es la mejor predicción de los valores de `\(x\)` para fechas futuras?. --- ## Datos de series de tiempo - Una base de **datos de series de tiempo** consiste de las observaciones de una o varias variables a lo largo del tiempo. - Dado que **eventos pasados pueden influir sobre los eventos futuros**, el tiempo es una dimensión importante en las bases de datos de series de tiempo. - A diferencia de los datos de corte transversal, en una serie de tiempo el **orden cronológico de las observaciones** proporciona información potencialmente importante. - Característica de los datos de series de tiempo: - **Dependencia temporal:** Relación con historia reciente. - **Periodicidad de los datos**: Frecuencia con que éstos se recolectan (diaria, semanal, mensual, trimestral, anual). --- ## Algunos ejemplo de series de tiempo <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/plot_pib_anual-1.png" width="75%" style="display: block; margin: auto;" /> --- ## Algunos ejemplo de series de tiempo <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/desempleo-1.png" width="75%" style="display: block; margin: auto;" /> --- ## Algunos ejemplo de series de tiempo <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/tcr-1.png" width="75%" style="display: block; margin: auto;" /> --- ## Algunos ejemplo de series de tiempo <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/inflacion-1.png" width="75%" style="display: block; margin: auto;" /> --- ## Algunos ejemplo de series de tiempo <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/googlep-1.png" width="75%" style="display: block; margin: auto;" /> --- ## Algunos ejemplo de series de tiempo ¿Qué fue lo que observamos? 1. Fuertes tendencias. 2. Difícil de distinguir tendencias y ciclos. 3. Ciclos estocásticos, difíciles de predecir. 4. Comportamientos estacionales marcados. 5. Covariaciones sugerentes. 6. Cambios estructurales. 7. Varianza variable en el tiempo --- class: separator-blue, middle # Conceptos básicos --- ## Proceso estocástico ¿Cómo se debe considerar la aleatoriedad en los datos de series de tiempo? **Definición**: *Un Proceso Estocástico o PGD es una sucesión de variables aleatorias ordenadas en el tiempo.* `$$\{Y_{-\infty},…,Y_{0},Y_{1},Y_{2},…,Y_{\infty}\}\,\,o\,\,\{Y_{t}\}_{t=-\infty}^{\infty}$$` - Cada `\(Y_{t}\)` es una variable aleatoria y tendrá su propia función de distribución `\(F(r)=p(Y\leq r)\)` con sus correspondientes momentos `\((\mathbb{E}(Y_{t}),\mathbb{V}(Y_{t}))\)`. - Para caracterizar un proceso estocástico en un período determinado, digamos de `\(1\)` a `\(T\)`, debemos especificar la función de distribución conjunta de estas variables: `\(F(Y_{1},Y_{2},…,Y_{T})\)`. - Consideramos sólo observaciones consecutivas y equidistantes una de la otra en el tiempo. La distancia en el tiempo se denomina *frecuencia* (anual, trimestral, mensual, semana, diaria). --- ## Realización de un proceso estocástico **Definición**: *Una serie de tiempo* `\(\{Y_{1},…,Y_{T}\}\)`*, con* `\(T\)` *el número de observaciones, contiene los valores observados de la variable* `\(Y_{t}\)`*, esto es, las realizaciones del PGD. Únicamente se puede observar una sola realización, ya que no es posible retroceder en el tiempo y empezar de nuevo el proceso.* <img src="img/procesoestocastico.png" width="70%" style="display: block; margin: auto;" /> --- ## Componentes de una series de tiempo Considere la siguiente serie de tiempo: .pull-left[ <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/pasajeros-1.png" width="120%" style="display: block; margin: auto;" /> ] .pull-right[ Componentes: - Aditivo: `$$Y_t=T_{t}+S_{t}+I_{t}$$` - Multiplicativo: `$$Y_t=T_{t} \times S_{t} \times I_{t}$$` o alternativamente `$$\log Y_t = \log T_{t}+ \log S_{t}+ \log I_{t}$$` ] --- ## Componentes de una series de tiempo Veamos los diferentes componentes: <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/desomp_pasajeros-1.png" width="70%" style="display: block; margin: auto;" /> --- ## Trasformaciones y ajustes a una series de tiempo - Ajustar los datos históricos a menudo puede conducir a una serie temporal **más fáciles de modelar e interpretar**. - Veremos cuatro tipos de ajustes: - Ajustes calendario. - Ajustes poblacionales. - Ajustes por inflación. - Transformaciones matemáticas (logaritmos). - El propósito de estos **ajustes y transformaciones** es simplificar los patrones de los datos históricos eliminando fuentes de variación conocidas o haciendo que el patrón sea más coherente en todo el conjunto de datos. --- ## Trasformaciones y ajustes a una series de tiempo **Ajustes Calendario**: - Parte de la variación observada en los datos estacionales puede deberse a efectos simples del calendario. - Es mucho más fácil eliminar la variación antes de hacer cualquier análisis posterior. - Por ejemplo, tomemos las **ventas mensuales en una tienda minorista**. - Se observará variación entre los meses simplemente debido al diferente número de días hábiles además de la variación estacional a lo largo del año. - Calcular las ventas promedio por día hábil en cada mes, en lugar de las ventas totales en el mes, eliminara esta variación. --- ## Trasformaciones y ajustes a una series de tiempo **Ajustes poblacionales**: - Cualquier serie de tiempo que se vea afectada por cambios en la población se puede ajustar para obtener datos per cápita, esto es: `$$Y_t / Pob_t$$` - Por ejemplo, si estudiamos la **cantidad de camas de hospital**, los resultados son más fáciles de interpretar si elimina el efectos de cambios de población. - Se puede ver si ha habido aumentos reales en el número de camas, o si los aumentos se deben enteramente a aumentos de población. - Es posible que aumente el número total de camas, pero que disminuya el número de camas por cada mil personas (la población aumenta más rápido que el número de camas de hospital). - Es también útil para comparar características de dos poblaciones distintas. --- ## Trasformaciones y ajustes a una series de tiempo **Ajustes por inflación**: - Cuando los datos que se ven afectados por el valor del dinero, es mejor ajustarlos antes de modelar e interpretar. - Por ejemplo, el **precio promedio de una casa nueva** habrá aumentado en las últimas décadas debido a cambios en el valor de la cada y/o a la inflación. - Una casa de 50 millones este año no es lo mismo que una casa de 50 millones hace veinte años. - Para realizar ajustes por inflación se utiliza un índice de precios. Si `\(P_t\)` es el índice de precios e `\(Y_t\)` es el precio original de la vivienda, entonces `\(Y^A_t = (Y_t / P_t) \times 100\)` es el precio de la casa ajustado a valores en pesos del año base. - El índices de precios suele ser el Índice de precios al consumidor (IPC). --- ## Trasformaciones y ajustes a una series de tiempo **Transformaciones matemáticas (logaritmos)**: - Si los datos muestran una variación que aumenta o disminuye con el nivel de la serie, entonces una transformación puede ser útil. - Por ejemplo, una **transformación logarítmica**: `\(y_t = \log Y_t\)` o `\(y_t = \ln Y_t\)`. Los logaritmos son útiles porque son interpretables: - Los cambios en un valor logarítmico son cambios relativos (o porcentuales) en la escala original. - Si se usa la base logarítmica 10, entonces un aumento de 1 en la escala logarítmica corresponde a una multiplicación de 10 en la escala original. - Si se usa la base `\(e\)`, entonces los aumentos son exponenciales. - Si algún valor de la serie original es cero o negativo, los logaritmos no son posibles. --- ## Rezagos, adelantos y diferencias - Rezagos: - El primer rezago de una serie de tiempo `\(Y_{t}\)` es `\(Y_{t-1}\)`. - El rezago *j-esimo* de una serie de tiempo `\(Y_{t}\)` es `\(Y_{t-j}\)`. - Una forma conveniente de representar rezagos es usando el *operador de rezagos*: `\(Y_{t-j} = L^j Y_t\)`. - Adelantos: - El primer adelanto de una serie de tiempo `\(Y_{t}\)` es `\(Y_{t+1}\)`. - El adelanto *j-esimo* de una serie de tiempo `\(Y_{t}\)` es `\(Y_{t+j}\)`. - Usando el *operador de rezagos*: `\(Y_{t+j} = L^{-j} Y_t\)`. --- ## Rezagos, adelantos y diferencias - Primeras diferencias: - La primera diferencia de una serie de tiempo, `\(\Delta Y_{t}\)` es el cambio entre los períodos `\(t-1\)` y `\(t\)`, esto es `\(\Delta Y_{t}= Y_{t}-Y_{t-1}\)`. - Usando el *operador de rezagos*: `\(\Delta Y_{t}= (1 - L)Y_{t}\)`. - Segundas diferencias - La segunda diferencia es la diferencia de primeras diferencias `\(\Delta^2 Y_{t}= \Delta Y_{t}- \Delta Y_{t-1}\)`. Usando la definición de primera diferencia `\(\Delta^2 Y_{t}= Y_{t} - 2 Y_{t-1} + Y_{t-2}\)`. - Tasa de Crecimiento - La primer diferencia del logaritmo de una serie de tiempo `\(Y_{t}\)` es `\(\Delta\ln Y_{t}=\ln Y_{t}-\ln Y_{t-1}\)` - La tasa de crecimiento una una serie de tiempo entre los periodos `\(t-1\)` y `\(t\)` es `\(g_{Y}=\frac{Y_{t}-Y_{t-1}}{Y_{t-1}}\times100\)`, la misma que puede ser aproximada (para cambios pequeños) por: `\(g_{Y}=\Delta\ln Y_{t}\times100\)` --- ## Correlación serial o autocorrelación - Se denomina **autocorrelación** o correlación serial a la correlación entre una serie de tiempo y sus valores rezagados. - Definimos la primera autocovarianza como: `$$Cov(Y_{t},Y_{t-1})=\mathbb{E}\left[\left(Y_{t}-\mathbb{E}[Y_{t}]\right)\left(Y_{t-1}-\mathbb{E}[Y_{t-1}]\right)\right]$$` - La primera autocorrelación se define entonces como: `$$\rho_{1}=corr(Y_{t},Y_{t-1})=\frac{Cov(Y_{t},Y_{t-1})}{\sqrt{\mathbb{V}(Y_{t})\mathbb{V}(Y_{t-1})}}$$` - Estas correlaciones están definidas en el PGD, esto es son **poblacionales**. Describen la distribución conjunta entre `\(Y_{t},Y_{t-1}\)`. --- ## Correlación serial o autocorrelación - De la misma forma definimos la *j-esima* covarianza y la *j-esima* correlación. `$$Cov(Y_{t},Y_{t-j})=\mathbb{E}\left[\left(Y_{t}-\mathbb{E}[Y_{t}]\right)\left(Y_{t-j}-\mathbb{E}[Y_{t-j}]\right)\right]$$` `$$\rho_{j}=corr(Y_{t},Y_{t-j})=\frac{Cov(Y_{t},Y_{t-j})}{\sqrt{\mathbb{V}(Y_{t})\mathbb{V}(Y_{t-j})}}$$` - Describimos la distribución conjunta entre `\(Y_{t},Y_{t-j}\)` en el PGD. --- ## Correlación serial o autocorrelación - La *j-esima* autocorrelación muestral es el estimador de la *j-esima* autocorrelación poblacional: `$$\hat{\rho}_{j}=\frac{\widehat{Cov(Y_{t},Y_{t-j})}}{\widehat{Var(Y_{t})}}$$` donde: `$$\widehat{Cov(Y_{t},Y_{t-j})}=\frac{1}{T}\sum_{t=j+1}^{T}(Y_{t}-\bar{Y}_{j+1,T})(Y_{t-j}-\bar{Y}_{1,T-j})$$` - `\(\bar{Y}_{j+1,T}\)` es el promedio muestral de `\(Y_{t}\)` calculado con las observaciones `\(t=j+1,...,T\)`. - Nota: - La suma es sobre `\(j+1\)` hasta `\(T\)`. - La división se realiza entre `\(T\)` y no entre `\(T-j\)` (definición convencional en series de tiempo). --- ## Estacionariedad **Definición**: *Una serie de tiempo es estacionaria si su distribución de probabilidad no cambia en el tiempo, esto es, si la distribución conjunta de* `\(Y_{s+1},Y_{s+2},...,Y_{s+T}\)` *no depende de* `\(s\)` *sin importar el valor de* `\(T\)`*. En caso contrario, la series es no estacionaria. Por otro lado, se dice que un par de series de tiempo* `\(X_{t}\)` *e* `\(Y_{t}\)` *son conjuntamente estacionarias si la distribución conjunta de* `\(Y_{s+1},...,Y_{s+T},X_{s+1},...X_{s+T}\)` *no depende de* `\(s\)` *sin importar el valor de* `\(T\)`*.* Interpretación: - El concepto de estacionariedad nos indica que la **historia es relevante**. - Implica que el **futuro es parecido al pasado**, al menos en un sentido probabilístico. - Estacionariedad es clave para dale **validez externa** al modelo de regresión. --- ## Estacionariedad débil Definición alternativa, más débil pero más práctica: **Definición (Estacionariedad en Covarianza)** *Un proceso estocástico `\(y_{t}\)` es débilmente estacionario o estacionario en covarianza si y solo si:* 1. `\(\mathbb{E}\left[y_{t}\right]=\mu<\infty,\,\,\,\forall t\)` 2. `\(\mathbb{V}(y_{t})=\mathbb{E}\left[(y_{t}-\mathbb{E}[y_{t}])^{2}\right]=\gamma_{0}<\infty,\,\,\,\forall t\)` 3. `\(Cov(y_{t},y_{t-j})=\mathbb{E}\left[(y_{t}-\mathbb{E}[y_{t}])(y_{t-j}-\mathbb{E}[y_{t-j}])\right]=\gamma_{j}<\infty,\,\,\,\forall t,\forall j\)` Interpretación: - Una serie de tiempo con media y varianza constantes y finitas y con covarianzas que solo dependen del rezago para el cual se definen pero no del tiempo es considerada estacionaria en el sentido débil. --- class: separator-blue, middle # Usando R con series de tiempo --- ## Definiendo series de tiempo en R - Para realizar cálculos específicos con series de tiempo (como rezagos, adelantos, tendencias y efectos estacionales, etc) tendremos que definir explícitamente la estructura de nuestros datos. - En R, hay varios **tipos de series de tiempo**. La distinción más importante se relaciona con si los datos están equidistantes entre sí en el tiempo o no. - Las series de tiempo **equidistantes en el tiempo** se recopilan en puntos regulares en el tiempo (ejemplos: datos mensuales, trimestrales o anuales. En R, estos datos se almacenan de manera eficiente en el tipo de variable `ts` (time series). - Las series de tiempo **irregulares** tienen distancias variables (ejemplos datos financiero diarios o por horas. Trabajaremos principalmente con datos equidistantes. Hay varios paquetes para declarar series de tiempo irregulares, los más importantes son `xts` (extended time series) y `zoo`. --- ## Definiendo series de tiempo en R - Objetos tipo `ts`, para series de tiempo que son **equidistantes en el tiempo**, se definen de la siguiente manera: ```r datos_st = ts(datos, start = c(año, periodo), frequency = num_frec) ``` donde - `datos` puede ser un vector, una matriz, o una base de datos (`data.frame` o `tibble`). - `c(año, periodo)` es un vector con el año de inicio y el periodo intra anual de inicio (1 a 4 para series trimestrales, 1 a 12 para series mensuales, etc.) - `num_frec` es un número que representa la frecuencia con la que se observa la serie de tiempo: 2 para datos semestrales, 4 para datos trimestrales, 12 para datos mensuales, 52 para datos semanales, etc. - Una vez declarada una serie de tiempo, tenemos una serie de funciones específicas a este tipo de datos. ```r y_j = lag(datos_st, k = -j) # rezago j-esimo dy_j = diff(datos_st, lag = j) # dy = y_t - y_t-j ddy = diff(datos_st, , differences = 2) # d(dy) = (y_t - y_t-1)-(y_t-1 - y_t-2) ``` --- ## Definiendo series de tiempo en R - El paquete `lubridate` permite trabajar de forma bien conveniente con fechas en R (permite entre otras cosas convertir texto en fechas, hacer cálculos entre fechas, obtener ciertos componentes de una fecha). ```r library(lubridate) ``` - Para transformar una variable en formato fecha usamos funciones como `ymd()`, `mdy()`, `qy()`, etc (ver la ayuda para los distintos formatos de fecha): ```r ymd("2017-01-31") # formato año-mes-día y obtenemos "2017-01-31" mdy("January 31st, 2017") # format mes-día-año y obtenemos "2017-01-31" dmy("31-Jan-2017") # format día-mes-año y obtenemos "2017-01-31" ``` Nota: la variable a transformar puede ser un vector. - En ocasiones tenemos diferentes componentes de una fecha en diferentes variables (por ejemplo, variables año, mes y día). En este caso usamos la función `make_datetime()`. ```r make_datetime(year = 1978, month = 2, day = 18) # obtenemos "1978-02-18" ``` --- ## Definiendo series de tiempo en R - Es posible extraer distintos componentes de una fecha usando funciones como `year()`, `month()`, `mday()`, etc: ```r dmy("14/10/1979") month(bday) # obtenemos 10 year(bday) # obtenemos 1979 wday(bday, label = TRUE) # Obtenemos Sun ``` - Contar con variables en formato adecuado de fechas va a ser muy útil para aquellas series de tiempo que son **irregulares** (sólo días de semana por ejemplo). Usando el paquete `xts` tenemos: ```r library(xts) datos_st = xts(x=datos, order.by=variable_fechas) ``` El paquete `xts` nos da funciones similares a `ts` pero que pueden lidiar con series de tiempo que son irregulares: `lag.xts()` y `diff.xts()`. --- ## Funciones útiles para trabajar con series de tiempo - Para extraer las observaciones de una serie de tiempo para un sub-periodo usamos la función `window()`. ```r nueva_st <- window(serie_tiempo, start = c(año,periodo), end = c(año,periodo)) ``` Si `start` o `end` no son provistos la función usa la fecha inicial o final, respectivamente. - Para agrupar series de tiempo, manteniendo el periodo de tiempo común entre series de tiempo, usamos la función `ts.intersect()`. ```r nuevo_grupo_st <- ts.intersect(serie_tiempo_1, serie_tiempo_2) ``` - Para agrupar series de tiempo, manteniendo el periodo de tiempo que engloba ambas series de tiempo, usamos la función `ts.union()`. ```r nuevo_grupo_st <- ts.union(serie_tiempo_1, serie_tiempo_2) ``` Note que las observaciones faltantes serán relledadas con `NA`. --- ## Funciones útiles para trabajar con series de tiempo - Las autocovarianzas y autocorrelaciones se pueden calcular a diferentes rezagos usando al función `acf()`. ```r acf(serie_tiempo, lag.max = num_rez, type = typo_stat, plot = TRUE) ``` donde `typo_stat` puede ser `"correlation"` o `"covariance"`; `num_rez` indica que se usaran los rezagos 1 a `num_rez`; `plot = TRUE` indica que se generará un gráfico con los resultados. - Las covarianzas y correlaciones cruzadas entre dos series de tiempo se pueden calcular a diferentes rezagos usando al función `ccf()`. ```r ccf(serie_tiempo_1, serie_tiempo_2, lag.max = num_rez, type = typo_stat, plot = TRUE) ``` Las mismoas opciones anteriores aplican también a esta función. - Para cambiar la frecuencia de una serie de tiempo, por ejemplo llevarla de mensual a trimestral, usamos la función `aggregate() ` y una función de agregación (por ejemplo `sum` o `mean`). ```r nueva_serie_tiempo <- aggregate.ts(serie_tiempo, nfrequency = nueva_frecuencia, FUN = función) ``` --- ## Ejemplo 1: Propiedades estadísticas de la tasa de inflación en Chile ```r library(readxl) # Leer documentos xlsx # Cargando datos datos <- read_xlsx("data/inflacion.xlsx", sheet = "Cuadro", skip = 3, col_names = c("date","inf12")) # Inflación en 12 meses 1981 - 2021 mensual inf.ts <- ts(datos$inf12, start = c(1981,1), frequency = 12) # Inflación en doce meses sólo para el periodo 2000 - 2021 inf.ts2 <- window(inf.ts, start = c(2000,1)) # Primera diferencia de la inflación en 12 meses dinf.ts2 <- diff(inf.ts2, lag = 1) # Alternativamente usando rezagos dinf_2.ts2 <- inf.ts2 - lag(inf.ts2, k = -1) # Anualizar la inflación usando promedios inf_anual = aggregate(inf.ts2, nfrecuency = 1, FUN = mean) ``` --- ## Ejemplo 1: Propiedades estadísticas de la tasa de inflación en Chile .pull-left[ ```r plot(inf.ts2, main = "Inflación", xlab = "Periodos", ylab = "Porcentaje", col = "red") ``` <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/ts_inflacion-1.png" width="100%" style="display: block; margin: auto;" /> ] .pull-right[ ```r plot(dinf.ts2, main = "Dif. Inflación", xlab = "Periodos", ylab = "p.p.", col = "blue") ``` <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/ts_dif_inflacion-1.png" width="100%" style="display: block; margin: auto;" /> ] --- ## Ejemplo 1: Propiedades estadísticas de la tasa de inflación en Chile .pull-left[ ```r acf(inf.ts2, main = "FA: Inflación", xlab = "Rezago (Meses)") ``` <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/ts_afc_inflacion-1.png" width="100%" style="display: block; margin: auto;" /> ] .pull-right[ ```r acf(dinf.ts2, main = "FA: Dif. Inflación", xlab = "Rezago (Meses)") ``` <img src="2_Introduccion_Series_de_Tiempo_files/figure-html/ts_afc_dif_inflacion-1.png" width="100%" style="display: block; margin: auto;" /> ]