Random Genomes

A stochastic blog about R, statistics, biology, and beyond

10 Apr 2020

Distribución de edad en casos COVID-19 por estado en México

Este es el segundo post en la serie COVID-19. En el blog post anterior use un modelo Bayesiano jerárquico para estimar la tasa de mortalidad por país. En esta ocasión traigo una visualización de la distribución de casos confirmado por edad.

Datos

La secretaria de salud actualiza diariamente un comunicado técnico que incluye los casos confirmados desglosados por estado. Desafortunadamente la secretaria este utilizando un archivo pdf lo cual dificulta la lectura para manipular los datos.

Gracias a Serendiapia por su portal de datos abiertos, que han estado compartiendo este comunicado técnico en un formato csv, lo cual hace el trabajo de lectura a una línea de codigo. En R, una alternativa para lectura de tablas en formato pdf es el paquete tabularizer, en el caso de estos datos esta opción requiere de procesamiento adicional.

library(tidyverse)
library(lubridate)
library(ggridges)
library(geofacet)
library(ggthemes)


# form the serendipia ur by extracting the current day - 1
current_day <- str_replace_all(Sys.Date() - 1, pattern = "-", replacement = '.') 
url <- paste0(
  'https://serendipia.digital/wp-content/uploads/2020/04/Tabla_casos_positivos_COVID-19_resultado_InDRE_',
  current_day,
  '-Table-1.csv'
)
datos_covid <- read_csv(url)

Visualización

Realizare esta visualización con ggplot2. Algunos paquetes adicionales que utilizare son:

  • gghighlight Para remarcar líneas y facilitar su comparación
  • geofacet Permite utilizar facets que aparentan la distribución geográfica de estados

Aquí esta la grafica

# poner el nombre del estado compatible con facet_geo 

datos_covid <- 
  datos_covid %>% 
  mutate(
    name = str_to_title(Estado),
    name = stringi::stri_trans_general(str = name, id = "Latin-ASCII"),
    name = if_else(name == "Ciudad De Mexico", "Distrito Federal", name),
    fecha = dmy(`Fecha de Inicio de síntomas`)
  )

## calcula las medias por estado y colocalas en la grafica

datos_covid %>%
  filter(!is.na(name)) %>% 
  ggplot(aes(x = Edad, group = name)) +
  geom_freqpoly(binwidth = 10, size = 1/2, position = 'jitter', color = 'white') +
  gghighlight::gghighlight(
    name %in% datos_covid$name, unhighlighted_params = list(size = 1/7, colour = alpha("pink", 0.4))
  ) + 
  labs(
    x = "Edad [años]",
    y = "No. de casos confirmados",
    title = "Distribucion de casos COVID-19 por edad en Mexico",
    caption = paste("https://santiagogmedina.com | ",
                    "Actualizado: ", Sys.Date() - 1,
                    " | Fuente: comunicado técnico diario, secretaria de salud")
  ) +
  scale_x_continuous(breaks = c(10, 40, 70)) +
  scale_y_sqrt(breaks = c(10, 100, 200)) +
  facet_geo(~name, grid = 'mx_state_grid1') +
  #theme_tufte(base_family = 'Helvetica') +
  ggdark::dark_theme_minimal()

Conclusiones

  • Existe una ausencia de casos reportados en individuos con menos de 10 años.
  • En esta grafica podemos observar las regiones con mayor incidencia que es el norte del país especialmente Baja California Norte y el centro del país (CDMX y el estado de México).

Reproducibility

## R version 3.6.2 (2019-12-12)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Mojave 10.14.6
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] ggthemes_4.2.0  geofacet_0.1.10 ggridges_0.5.2  lubridate_1.7.4
##  [5] forcats_0.4.0   stringr_1.4.0   dplyr_0.8.4     purrr_0.3.3    
##  [9] readr_1.3.1     tidyr_1.0.2     tibble_2.1.3    ggplot2_3.3.0  
## [13] tidyverse_1.3.0
## 
## loaded via a namespace (and not attached):
##  [1] httr_1.4.1          rnaturalearth_0.1.0 gghighlight_0.3.0  
##  [4] jsonlite_1.6.1      modelr_0.1.5        assertthat_0.2.1   
##  [7] sp_1.4-1            cellranger_1.1.0    yaml_2.2.1         
## [10] ggrepel_0.8.2       pillar_1.4.3        backports_1.1.5    
## [13] lattice_0.20-38     glue_1.3.1          digest_0.6.24      
## [16] rvest_0.3.5         colorspace_1.4-1    htmltools_0.4.0    
## [19] plyr_1.8.5          pkgconfig_2.0.3     broom_0.5.4        
## [22] haven_2.2.0         bookdown_0.18       scales_1.1.0       
## [25] jpeg_0.1-8.1        generics_0.0.2      farver_2.0.3       
## [28] withr_2.1.2         ggdark_0.2.1        cli_2.0.1          
## [31] magrittr_1.5        crayon_1.3.4        readxl_1.3.1       
## [34] evaluate_0.14       fs_1.3.1            fansi_0.4.1        
## [37] nlme_3.1-142        xml2_1.2.2          class_7.3-15       
## [40] blogdown_0.18       tools_3.6.2         imguR_1.0.3        
## [43] hms_0.5.3           lifecycle_0.1.0     munsell_0.5.0      
## [46] geogrid_0.1.1       reprex_0.3.0        compiler_3.6.2     
## [49] e1071_1.7-3         rlang_0.4.4         classInt_0.4-2     
## [52] units_0.6-6         grid_3.6.2          rstudioapi_0.11    
## [55] rmarkdown_2.1       gtable_0.3.0        DBI_1.1.0          
## [58] curl_4.3            R6_2.4.1            gridExtra_2.3      
## [61] knitr_1.28          rgeos_0.5-2         KernSmooth_2.23-16 
## [64] stringi_1.4.6       Rcpp_1.0.3          vctrs_0.2.2        
## [67] sf_0.8-1            png_0.1-7           dbplyr_1.4.2       
## [70] tidyselect_1.0.0    xfun_0.12
comments powered by Disqus