#Librerias
library(lubridate)
Attaching package: ‘lubridate’
The following object is masked from ‘package:base’:
date
library(dplyr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:lubridate’:
intersect, setdiff, union
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
Realizamos la lectura de los datasets y miramos su estructura
ipc = read.csv('../Fuentes/ipc-mensual.csv')
dolar = read.csv('../Fuentes/dolar-diario.csv')
glimpse(ipc)
Observations: 4
Variables: 29
$ Apertura <fct> Nivel general, Estacionales, Núcleo, Regulados
$ Apr.16 <dbl> 85.5, 89.9, 85.4, 84.0
$ May.16 <dbl> 89.1, 93.7, 87.6, 91.3
$ Jun.16 <dbl> 91.9, 96.3, 90.3, 94.5
$ Jul.16 <dbl> 93.7, 99.6, 92.0, 96.3
$ Aug.16 <dbl> 93.9, 95.3, 93.5, 94.6
$ Sep.16 <dbl> 95.0, 99.2, 94.9, 93.3
$ Oct.16 <dbl> 97.2, 101.1, 96.7, 97.2
$ Nov.16 <dbl> 98.8, 101.6, 98.3, 99.1
$ Dec.16 <dbl> 100, 100, 100, 100
$ Jan.17 <dbl> 101.3, 101.6, 101.3, 101.1
$ Feb.17 <dbl> 103.8, 102.1, 103.2, 106.3
$ Mar.17 <dbl> 106.3, 105.9, 105.1, 109.9
$ Apr.17 <dbl> 109.1, 108.5, 107.5, 113.9
$ May.17 <dbl> 110.5, 108.0, 109.2, 115.2
$ Jun.17 <dbl> 112.0, 109.6, 110.9, 116.4
$ Jul.17 <dbl> 113.9, 110.1, 112.8, 118.8
$ Aug.17 <dbl> 115.6, 111.5, 114.5, 120.6
$ Sep.17 <dbl> 118.0, 117.2, 116.5, 122.5
$ Oct.17 <dbl> 119.5, 119.8, 117.9, 124.1
$ Nov.17 <dbl> 120.9, 121.0, 119.4, 125.2
$ Dec.17 <dbl> 125.0, 121.2, 121.8, 136.4
$ Jan.18 <dbl> 127.0, 125.2, 123.5, 138.1
$ Feb.18 <dbl> 130.3, 124.0, 126.2, 145.1
$ Mar.18 <dbl> 133.5, 127.3, 129.3, 148.5
$ Apr.18 <dbl> 136.9, 126.8, 132.1, 155.8
$ May.18 <dbl> 139.6, 130.8, 135.4, 155.7
$ Jun.18 <dbl> 145.1, 135.0, 141.1, 161.2
$ Jul.18 <dbl> 149.1, 140.5, 145.2, 164.5
glimpse(dolar)
Observations: 4,056
Variables: 2
$ Fecha <fct> 04-03-02, 05-03-02, 06-03-02, 07-03-02, 08-03-02, 11-03-02,...
$ Tipo.de.Cambio.de.Referencia...en.Pesos...por.Dólar <dbl> 2.0083, 1.9917, 2.0508, 2.1375, 2.2033, 2.2525, 2.3650, 2.3...
Renombramos la variable del tipo de cambio por algo más sencillo
dolar = dolar %>% rename(tipo_cambio = Tipo.de.Cambio.de.Referencia...en.Pesos...por.Dólar)
Creamos las variables fecha, año, mes y dÃa
dolar = dolar %>% mutate(date=dmy(Fecha), year=year(date), month=month(date),
day=day(date))
glimpse(dolar)
Observations: 4,056
Variables: 6
$ Fecha <fct> 04-03-02, 05-03-02, 06-03-02, 07-03-02, 08-03-02, 11-03-02, 12-03-02, 13-03-02, 14-03-02, 15-03-02,...
$ tipo_cambio <dbl> 2.0083, 1.9917, 2.0508, 2.1375, 2.2033, 2.2525, 2.3650, 2.3317, 2.3650, 2.3408, 2.3175, 2.3783, 2.4...
$ date <date> 2002-03-04, 2002-03-05, 2002-03-06, 2002-03-07, 2002-03-08, 2002-03-11, 2002-03-12, 2002-03-13, 20...
$ year <dbl> 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 200...
$ month <dbl> 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ...
$ day <int> 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22, 25, 26, 27, 2, 3, 4, 5, 8, 9, 10, 11, 12, 15...
Seleccionamos el primer dÃa hábil del mes para obtener la primer cotización del mes. La cotización del dólar se disponibiliza el primer dÃa hábil del mes y no el primer dÃa del mes.
fecha_cotizacion= dolar%>% group_by(year,month) %>%
summarise(day=min(day))
Realizamos el join con el dataframe del primer dÃa hábil
dolar = dolar %>% inner_join(fecha_cotizacion, by=c('year', 'month', 'day')) %>% select(-c(Fecha, day))
Graficamos la evolución del tipo de cambio para todo el dataset
ggplot(dolar, aes(x=date, y=tipo_cambio)) +
geom_line() +
labs(x="Fecha", y="Tipo de cambio", title="Evolución del tipo de cambio")+
theme_bw()
Los datos de IPC están en un formato que hace su análisis bastante complicado. Pasamos los datos a un formato más util usando gather().
ipc= ipc %>% gather(., key = date, value = ipc, 2:29)
glimpse(ipc)
Observations: 112
Variables: 3
$ Apertura <fct> Nivel general, Estacionales, Núcleo, Regulados, Nivel general, Estacionales, Núcleo, Regulados, Nivel ...
$ date <chr> "Apr.16", "Apr.16", "Apr.16", "Apr.16", "May.16", "May.16", "May.16", "May.16", "Jun.16", "Jun.16", "J...
$ ipc <dbl> 85.5, 89.9, 85.4, 84.0, 89.1, 93.7, 87.6, 91.3, 91.9, 96.3, 90.3, 94.5, 93.7, 99.6, 92.0, 96.3, 93.9, ...
Creamos las variables fecha, año y mes
ipc= ipc %>% mutate(date=ymd(parse_date_time(date, orders = 'my')),
year=year(date), month=month(date))
Graficamos la distribución del IPC a nivel general
ipc %>% filter(Apertura== "Nivel general") %>%
ggplot(., aes(x= date, y = ipc, group = Apertura )) +
geom_point(color="firebrick")+
geom_line(size= 1,alpha=0.75, color = "firebrick")+
labs(x="Fecha", y="IPC", title="Evolución del IPC")+
theme_bw()
Graficamos la distribución del IPC por grupo
ggplot(ipc, aes(x= date, y = ipc, group = Apertura, color = Apertura )) +
geom_point()+
geom_line(size=1,alpha=0.75)+
labs(x="Fecha", y="IPC", title="Evolución del IPC por grupo")+
theme_bw()+
scale_color_brewer(palette = "Set1")
Procedemos a joinear ambos datasets usando como keys para joinear el año y el mes. No podemos utilizar la fecha porque van a diferir entre las bases. Utilizamos un inner join ya que solo queremos quedarnos con los meses para los cuales tenemos información del IPC y del dólar.
ipc_dolar = ipc %>% inner_join(dolar, by=c('year', 'month'))
glimpse(ipc_dolar)
Observations: 112
Variables: 7
$ Apertura <fct> Nivel general, Estacionales, Núcleo, Regulados, Nivel general, Estacionales, Núcleo, Regulados, Niv...
$ date.x <date> 2016-04-01, 2016-04-01, 2016-04-01, 2016-04-01, 2016-05-01, 2016-05-01, 2016-05-01, 2016-05-01, 20...
$ ipc <dbl> 85.5, 89.9, 85.4, 84.0, 89.1, 93.7, 87.6, 91.3, 91.9, 96.3, 90.3, 94.5, 93.7, 99.6, 92.0, 96.3, 93....
$ year <dbl> 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 2016, 201...
$ month <dbl> 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11,...
$ tipo_cambio <dbl> 14.7033, 14.7033, 14.7033, 14.7033, 14.2617, 14.2617, 14.2617, 14.2617, 13.9537, 13.9537, 13.9537, ...
$ date.y <date> 2016-04-01, 2016-04-01, 2016-04-01, 2016-04-01, 2016-05-02, 2016-05-02, 2016-05-02, 2016-05-02, 20...
Como existÃan dos columnas llamadas date, al realizar el join se le asigna por default el sufijo .x a la columna del primer dataframe y el sufijo .y al del segundo dataframe. Eliminamos una y modificamos el nombre de la restante
ipc_dolar = ipc_dolar %>% rename(date=date.x) %>% select(-date.y)
Realizamos algunas estadÃsticas descriptivas por año y mes para el IPC general y para el tipo de cambio
resumen=ipc_dolar %>% filter(Apertura=="Nivel general") %>%
group_by(year) %>%
summarise(dolar_promedio=mean(tipo_cambio),
desvio_dolar=sd(tipo_cambio),
mediana_dolar=median(tipo_cambio),
rango_dolar=max(tipo_cambio)-min(tipo_cambio),
ipc_promedio=mean(ipc),
desvio_ipc=sd(ipc),
mediana_ipc=median(ipc),
rango_ipc=max(ipc)-min(ipc))
resumen
Con las dos fuentes de información juntas, podemos realizar gráficos conjuntos Como los rangos de las variables son muy diferentes, tenemos que utilizar un segundo eje.
ggplot()+
geom_line(data = ipc_dolar %>% filter(Apertura=="Nivel general"),aes(x=date,y=ipc, color ="Nivel general"))+
geom_line(data = ipc_dolar,aes(date,tipo_cambio*10, color ="Dolar"))+
labs(x="Fecha", y="IPC", title="Evolución del IPC y Dolar")+
theme_bw()+
scale_y_continuous(sec.axis = sec_axis(~.*.1, name = "Dolar"))
También agrupando por apertura
ggplot()+
geom_line(data = ipc_dolar,aes(date,ipc))+
geom_line(data = ipc_dolar,aes(date,tipo_cambio*7, color ="Dolar"))+
scale_y_continuous(sec.axis = sec_axis(~./7, name = "Dolar"))+
scale_colour_manual("Color",values=c("darkgreen"))+
theme_bw()+
labs(x="Fecha", y="IPC", title="Evolución del IPC y Dolar por grupo")+
facet_wrap(.~Apertura)