--- title: "El ciclo económico en Costa Rica" author: "Randall Romero Aguilar" date: "Septiembre 2017" output: html_document: toc: yes toc_depth: '2' html_notebook: number_sections: yes theme: spacelab toc: yes toc_depth: 2 Encoding: UTF-8 --- Este R-notebook lee datos del Banco Central de Costa Rica que han sido previamente almacenados en el archivo de Excel **Datos-business-cycle.xlsx**, y aplica el filtro de Hodrick Prescott para analizar los ciclos. Empezamos importando algunos paquetes que serán útiles para este trabajo: - **readxl**: para leer datos de Excel - **dplyr**: para manipular las bases de datos - **magrittr**: para usar el operador "pipe" %>% - **ggplot2**: para graficar - **lubridate**: para manejar fechas - **mFilter**: contiene función para el filtro de Hodrick-Prescott ```{r} library(readxl) library(dplyr) library(magrittr) library(ggplot2) library(lubridate) library(mFilter) FILENAME <- "Datos-business-cycle.xlsx" ``` # LECTURA DE LOS DATOS En lo que sigue, se asume que los datos han sido previamente guardados en el archivo de Excel **Datos-business-cycle.xlsx**, ubicado en la misma carpeta que este cuaderno de R. Los datos se guardaron tal como fueron bajados desde el sitio web del BCCR. A los datos no se les aplicó ninguna transformación en Excel, únicamente se le cambió nombre a cada hoja de cálculo para que hiciera referencia al número de cuadro que se está utilizando. ## Cuentas nacionales Los datos están en la hoja *chart1677*, corresponden a - Producto Interno Bruto Trimestral y Gasto a precios constantes - Tendencia ciclo --- 1991 = 100 - http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/Cuadros/frmVerCatCuadro.aspx?CodCuadro=1677 Ahora leemos los datos usando la función **read_excel** del paquete readxl La opción *skip=4* indica que deben ignorarse las primeras 4 líneas de la hoja de excel; *[, -1]* le indica a R que la primera columna debe ser omitida (tiene nombres, no datos). La función *t()* transpone los datos. Seleccionamos las tres columnas de interés, y les cambiamos el nombre a las series a 'PIB', 'C', 'I'. Finalmente, indexamos los datos con la columna *DATE*, indicando que el primer dato es de 1991q1, y que la serie es trimestral. ```{r} ctasnac <- read_excel(FILENAME, sheet = "chart1677", skip = 4)[,-1] %>% t() %>% data.frame() %>% select(c(1,3,5)) colnames(ctasnac) <- c('PIB','C','I') ctasnac$DATE <- quarter(ymd('1991-03-01') + 3*months(0:(nrow(ctasnac)-1)), TRUE) ctasnac <- ctasnac[,c(4,1:3)] ``` ## Precios Los datos están en la hoja *chart2732*, corresponden a - Índice de precios al consumidor (IPC) - Junio 2015=100 --- Niveles y variaciones - http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/Cuadros/frmVerCatCuadro.aspx?CodCuadro=2732&FecInicial=1991/01/01 Al leer los datos de Excel, seleccionamos únicamente la serie 'Nivel', la cual renombramos como 'IPC'. Los datos originales son mensuales, por ello los indexamos como tales. Para poder compararlos con los datos de cuentas nacionales, los convertimos a datos trimestrales usando las funciones *group_by* y *summarize*, indicando que queremos el promedio de los tres meses correspondientes con .mean(). ```{r} precios <- read_excel(FILENAME, sheet = "chart2732", skip = 4) %>% data.frame() %>% select(Nivel) colnames(precios) <- c('IPC') rownames(precios) <- ymd('1991-01-01') + months(0:(nrow(precios)-1)) precios$DATE <- quarter(rownames(precios), TRUE) precios %<>% group_by(DATE) %>% summarise(IPC=mean(IPC)) ``` ## Dinero Los datos están en la hoja *chart125*, corresponden a - Medio circulante (M1) medido a nivel del sistema bancario - Saldos a fin de mes en millones de colones - http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/Cuadros/frmVerCatCuadro.aspx?CodCuadro=125&FecInicial=1991/01/01 ```{r} dinero <- read_excel(FILENAME, sheet = "chart125", skip = 4)[,-1] %>% t() %>% data.frame() %>% stack() %>% select(values) colnames(dinero) <- c('M1') rownames(dinero) <- ymd('1991-01-01') + months(0:(nrow(dinero)-1)) dinero$DATE <- quarter(rownames(dinero), TRUE) dinero %<>% group_by(DATE) %>% summarise(M1=mean(M1)) ``` ## Empleo Los datos están en la hoja *chart1914*, que corresponde a - Población ocupada en el empleo principal según posición en el empleo - Número de personas por trimestre - http://indicadoreseconomicos.bccr.fi.cr/indicadoreseconomicos/Cuadros/frmVerCatCuadro.aspx?CodCuadro=1914 Finalmente, leemos los datos de empleo, los cuales transponemos para que las columnas correspondan a series y las filas a trimestres. Utilizamos únicamente la serie 'Asalariado', la cual renombramos como 'N'. ```{r} empleo <- read_excel(FILENAME, sheet = "chart1914", skip = 4)[,-1] %>% t() %>% data.frame() %>% select(c(2)) colnames(empleo) <- c('N') empleo$DATE <- quarter(ymd('2010-09-01') + 3*months(0:(nrow(empleo)-1)), TRUE) ``` ## Combinar todos los datos Juntamos todos los datos de los ciclos en una misma base de datos usando *full_join*. Borramos las bases de datos previas. ```{r} DATOS <- ctasnac %>% full_join(precios,by="DATE") %>% full_join(dinero,by="DATE") %>% full_join(empleo,by="DATE") remove(ctasnac,dinero, precios, empleo) ``` # ANÁLISIS DE LOS DATOS ## Calcular el ciclo de cada serie, usando el filtro de Hodrick-Prescott Hacemos una base de datos *CYCLES*, en la cual almacenamos el ciclo del (logaritmo) de cada serie, filtrados con *hpfilter*. La variable *t* se utiliza para lidiar con los valores faltantes. ```{r} CYCLES <- DATOS for (k in 2:ncol(DATOS)){ t <- !is.na(DATOS[,k]) x <- log(DATOS[t,k]) CYCLES[t, k] <- hpfilter(x,1600)$cycle } ``` ## Calcular la correlación de los ciclos Las correlaciones de estas series con el PIB (rezagado, actual, futuro) puede calcularse usando *cor*. ```{r} CYCLES["LPIB"] <- lag(CYCLES$PIB) CYCLES["FPIB"] <- lead(CYCLES$PIB) CORRELACIONES <- cor(CYCLES[,2:7],select(CYCLES, ends_with("PIB")),use = 'pairwise')[,c(3,1,2)] CYCLES[,8:9] <- NULL CORRELACIONES ``` Estas correlaciones las ilustramos graficando cada serie contra el PIB. En cada gráfico mostramos además una regresión lineal entre la serie respectiva y el PIB. ```{r} CYCLES[,-1] %>% tidyr::gather('serie','valor',2:6) %>% ggplot(aes(PIB, valor)) + geom_point() + geom_smooth(method = lm) + facet_wrap(~serie, scales='free_y') ``` ## Volatilidad de los ciclos Finalmente, calculamos la volatilidad de cada serie, relativa a la del PIB. ```{r} volatiliy <- CYCLES[,2:7] %>% summarise_each(funs(sd(.,na.rm = TRUE))) volatiliy <- 100 * t(volatiliy) / volatiliy[1,1] volatiliy ``` Puede verse que el consumo es menos volátil que el PIB, mientras que la inversión y el dinero son mucho más volátiles.