22 jun 2022

Estudio de eventos: representar promedios de series temporales en ggplot2

En la siguiente entrada se utiliza la base de datos tipo wide de nombre EuStockMarkets, disponible en R, la misma cuenta con los índices asociados a los siguientes activos financieros (solo se presenta como obtener los datos sin profundizar sobre la forma de interpretación de los mismos):

library(tidyverse)
head(EuStockMarkets)
head(EuStockMarkets)
Time Series:
Start = c(1991, 130)
End = c(1991, 135)
Frequency = 260
             DAX    SMI    CAC   FTSE
1991.496 1628.75 1678.1 1772.8 2443.6
1991.500 1613.63 1688.5 1750.5 2460.2
1991.504 1606.51 1678.6 1718.0 2448.2
1991.508 1621.04 1684.1 1708.1 2470.4
1991.512 1618.16 1686.6 1723.1 2484.7
1991.515 1610.61 1671.6 1714.3 2466.8

Transformamos la data a versión wide, porque al hacer un by_group.

wide_data <- data.frame(EuStockMarkets) %>%
  mutate(fecha = time(EuStockMarkets)) %>%
  gather(id, value, -fecha)
 
wide_data %>%  head()
 
> wide_data %>%  head()
     fecha  id   value
1 1991.496 DAX 1628.75
2 1991.500 DAX 1613.63
3 1991.504 DAX 1606.51
4 1991.508 DAX 1621.04
5 1991.512 DAX 1618.16
6 1991.515 DAX 1610.61

Gráfico resaltando un evento determinado:

wide_data %>%
  ggplot(aes(x = fecha, y = value)) +
  geom_line(aes(color = id), size = 1)+
  theme_minimal() +
  facet_wrap(~id, scales='free_y',ncol=1)+
  theme(legend.position = "none")+
  geom_vline(xintercept=1997,linetype=4)

Agregando promedio alrededor de un evento

wide_data %>%
  dplyr::mutate(dummyT = (as.numeric(fecha)>1997)*1) %>%
  group_by(id,dummyT) %>%
  mutate(medias = mean(value, na.rm = T)) %>%
  ggplot(aes(x=fecha,y=value))+
  geom_line(aes(color = id))+
  geom_line(aes(x=fecha,y=medias,color = id))+
  facet_wrap(~id, scales='free_y',ncol=1)+
  theme(legend.position = "none")+
  geom_vline(xintercept=1997,linetype=4)+
  theme_minimal()+
  theme(legend.position = "none")

Agregando promedio alrededor de varios eventos

wide_data %>%
  dplyr::mutate(dummyT = case_when(
    as.numeric(fecha)<1994 ~ 1,
    between(as.numeric(fecha),1994,1997) ~ 2,
    as.numeric(fecha)>1997 ~ 3
  )) %>%
  group_by(id,dummyT) %>%
  mutate(medias = mean(value, na.rm = T)) %>%
  ggplot(aes(x=fecha,y=value))+
  geom_line(aes(color = id))+
  geom_line(aes(x=fecha,y=medias,color = id))+
  facet_wrap(~id, scales='free_y',ncol=1)+
  theme(legend.position = "none")+
  geom_vline(xintercept=c(1994,1997),linetype=4)+
  theme_minimal()+
  theme(legend.position = "none")



2 jun 2022

Exportar gráficos al directorio de trabajo en R

En el siguiente ejemplo se muestra como exportar una lista de gráficos al directorio de trabajo, guardado cada uno con un nombre en específico. Primero se guardan los gráficos en una lista; posterior se crea una lista de nombres con los que se guardaran los gráficos en el directorio de trabajo; posteriormente se asigna a cada nombre un gráfico determinado; por último, se guardan estos gráficos con ggsave.

library(tidyverse)
 
cesar <- list()
cesar[[1]] <- ggplot2::ggplot(iris, aes(x=Sepal.Length))+geom_density()
cesar[[2]] <- ggplot2::ggplot(iris, aes(x=Sepal.Length,y=Petal.Length))+geom_point()
 
nombres <- paste("graph", 1:length(cesar), sep="")
 
for (i in 1:length(cesar)){
  assign(nombres[i], cesar[[i]])
 
  nombres2 <- paste(nombres[i], ".png", sep="")
   ggplot2::ggsave(nombres2)
}

Creando variables por grupos en dplyr (group_by + mutate)

  Simulemos una base de hogares, donde se identifica el hogar, el sexo (1 mujer) y provincia y edad para cada miembro.   # Definir la lista ...