La librería de covidmx
está para ayudarte a analizar los
datos abiertos de COVID-19 de México, generar estadísticos de interés y
visualizaciones rápidas. La idea es ahorrarte tiempo.
Instalación
#install.packages("remotes")
remotes::install_github("RodrigoZepeda/covidmx")
No olvides llamar la librería y ¡a codear!
NOTA (datos precargados) Si lo que quieres hacer es ponerte a jugar con las funciones del paquete directamente puedes saltar hasta la sección de casos y usar los datos precargados:
datos_covid <- covidmx::datosabiertos #Uso de los datos precargados
Datos Abiertos de la Dirección General de Epidemiología
Descarga automática de base de datos abiertos
Lo más importante es comenzar descargando la base de datos abiertos. Esto lo puedes hacer como sigue:
datos_covid <- descarga_datos_abiertos()
Para propósito de este tutorial trabajaremos con una base de datos
más pequeña disponible en el repositorio de Github la cual
guardaremos en duckdb
bajo el nombre de
tutorial.
#Cómo vas a guardar tu base .duckdb
base_duck <- "mi_archivo.duckdb"
dlink <- c("tutorial" =
"https://github.com/RodrigoZepeda/covidmx/raw/main/datos_abiertos_covid19.zip")
datos_covid <- descarga_datos_abiertos(sites.covid = dlink, tblname = "tutorial",
dbdir = base_duck)
La descarga contiene una conexión a duckdb
dentro de
datos_covid$dats
la cual puedes operar con dbplyr
.
NO se agregan las etiquetas a los datos pues es muy tardado hacerlo:
datos_covid$dats |> dplyr::glimpse()
#> Rows: ??
#> Columns: 40
#> Database: DuckDB 0.7.0 [root@Darwin 22.2.0:R 4.2.2//var/folders/42/2kdf45dd1qz5n7kf9lm8ld9r0000gn/T//RtmpxTTKw1/file162953974c417.duckdb]
#> $ FECHA_ACTUALIZACION <dttm> 2022-07-14, 2022-07-14, 2022-07-14, 2022-07-14,…
#> $ ID_REGISTRO <chr> "78ce0b", "526821", "4ab051", "ba3171", "b970bb"…
#> $ ORIGEN <int> 2, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 1, 2, 2, …
#> $ SECTOR <int> 12, 4, 4, 4, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,…
#> $ ENTIDAD_UM <chr> "03", "03", "03", "03", "03", "03", "03", "03", …
#> $ SEXO <int> 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
#> $ ENTIDAD_NAC <chr> "09", "03", "25", "03", "03", "25", "03", "17", …
#> $ ENTIDAD_RES <chr> "03", "03", "03", "03", "03", "03", "03", "03", …
#> $ MUNICIPIO_RES <chr> "003", "008", "008", "008", "003", "003", "008",…
#> $ TIPO_PACIENTE <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, …
#> $ FECHA_INGRESO <dttm> 2021-07-08, 2021-07-01, 2021-07-01, 2021-07-01,…
#> $ FECHA_SINTOMAS <dttm> 2021-07-04, 2021-07-01, 2021-07-01, 2021-07-01,…
#> $ FECHA_DEF <dttm> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
#> $ INTUBADO <int> 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 2, 9…
#> $ NEUMONIA <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, …
#> $ EDAD <int> 17, 28, 30, 22, 32, 35, 24, 40, 21, 78, 13, 54, …
#> $ NACIONALIDAD <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
#> $ EMBARAZO <int> 2, 97, 97, 97, 97, 97, 97, 2, 2, 2, 2, 2, 2, 2, …
#> $ HABLA_LENGUA_INDIG <int> 99, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,…
#> $ INDIGENA <int> 99, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,…
#> $ DIABETES <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, …
#> $ EPOC <int> 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ ASMA <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ INMUSUPR <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ HIPERTENSION <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ OTRA_COM <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ CARDIOVASCULAR <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ OBESIDAD <int> 2, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ RENAL_CRONICA <int> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ TABAQUISMO <int> 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ OTRO_CASO <int> 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, …
#> $ TOMA_MUESTRA_LAB <int> 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, …
#> $ RESULTADO_LAB <int> 2, 97, 97, 97, 97, 1, 97, 97, 97, 97, 97, 4, 97,…
#> $ TOMA_MUESTRA_ANTIGENO <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
#> $ RESULTADO_ANTIGENO <int> 2, 2, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, …
#> $ CLASIFICACION_FINAL <int> 7, 7, 3, 7, 7, 3, 3, 3, 7, 7, 3, 6, 7, 7, 7, 7, …
#> $ MIGRANTE <int> 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, …
#> $ PAIS_NACIONALIDAD <chr> "México", "México", "México", "México", "México"…
#> $ PAIS_ORIGEN <chr> "97", "97", "97", "97", "97", "97", "97", "97", …
#> $ UCI <int> 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 2, 9…
Sin embargo el diccionario se almacena como una lista en
dict
para su consulta y uso por las funciones internas:
datos_covid$dict |> dplyr::glimpse()
#> List of 31
#> $ ORIGEN : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:3] 1 2 99
#> ..$ DESCRIPCIÓN: chr [1:3] "USMER" "FUERA DE USMER" "NO ESPECIFICADO"
#> $ SECTOR : tibble [14 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:14] 1 2 3 4 5 6 7 8 9 10 ...
#> ..$ DESCRIPCIÓN: chr [1:14] "CRUZ ROJA" "DIF" "ESTATAL" "IMSS" ...
#> $ SEXO : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:3] 1 2 99
#> ..$ DESCRIPCIÓN: chr [1:3] "MUJER" "HOMBRE" "NO ESPECIFICADO"
#> $ PACIENTE : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:3] 1 2 99
#> ..$ DESCRIPCIÓN: chr [1:3] "AMBULATORIO" "HOSPITALIZADO" "NO ESPECIFICADO"
#> $ NACIONALIDAD : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:3] 1 2 99
#> ..$ DESCRIPCIÓN: chr [1:3] "MEXICANA" "EXTRANJERA" "NO ESPECIFICADO"
#> $ RESULTADO_LAB : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 3 4 97
#> ..$ DESCRIPCIÓN: chr [1:5] "POSITIVO A SARS-COV-2" "NO POSITIVO A SARS-COV-2" "RESULTADO PENDIENTE" "RESULTADO NO ADECUADO" ...
#> $ RESULTADO_ANTIGENO : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:3] 1 2 97
#> ..$ DESCRIPCIÓN: chr [1:3] "POSITIVO A SARS-COV-2" "NEGATIVO A SARS-COV-2" "NO APLICA (CASO SIN MUESTRA)"
#> $ CLASIFICACION_FINAL : tibble [7 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:7] 1 2 3 4 5 6 7
#> ..$ CLASIFICACIÓN: chr [1:7] "CASO DE COVID-19 CONFIRMADO POR ASOCIACIÓN CLÍNICA EPIDEMIOLÓGICA" "CASO DE COVID-19 CONFIRMADO POR COMITÉ DE DICTAMINACIÓN" "CASO DE SARS-COV-2 CONFIRMADO" "INVÁLIDO POR LABORATORIO" ...
#> ..$ DESCRIPCIÓN : chr [1:7] "Confirmado por asociación aplica cuando el caso informó ser contacto de un positivo a COVID-19 (y este se encue"| __truncated__ "Confirmado por dictaminación solo aplica para defunciones bajo las siguientes condiciones: \r\nAl caso no se le"| __truncated__ "Confirmado aplica cuando:\r\nEl caso tiene muestra de laboratorio o prueba antigénica y resultó positiva a SAR"| __truncated__ "Inválido aplica cuando el caso no tienen asociación clínico epidemiológica, ni dictaminación a COVID-19. Se le "| __truncated__ ...
#> $ MUNICIPIO_RES : tibble [2,501 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE_MUNICIPIO: chr [1:2501] "001" "002" "003" "004" ...
#> ..$ MUNICIPIO : chr [1:2501] "AGUASCALIENTES" "ASIENTOS" "CALVILLO" "COSÍO" ...
#> ..$ CLAVE_ENTIDAD : chr [1:2501] "01" "01" "01" "01" ...
#> $ INTUBADO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ NEUMONIA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ EMBARAZO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ HABLA LENGUA INDIGENA: tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ INDIGENA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ DIABETES : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ EPOC : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ ASMA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ INMUSUPR : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ HIPERTENSION : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ CARDIOVASCULAR : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ OTRO_CASO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ TOMA_MUESTRA_LAB : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ TOMA_MUESTRA_ANTIGENO: tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ OTRA_COMORBILIDAD : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ OBESIDAD : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ RENAL_CRONICA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ TABAQUISMO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ UCI : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE : num [1:5] 1 2 97 98 99
#> ..$ DESCRIPCIÓN: chr [1:5] "SI" "NO" "NO APLICA" "SE IGNORA" ...
#> $ ENTIDAD_UM : tibble [36 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE_ENTIDAD : chr [1:36] "01" "02" "03" "04" ...
#> ..$ ENTIDAD_FEDERATIVA: chr [1:36] "AGUASCALIENTES" "BAJA CALIFORNIA" "BAJA CALIFORNIA SUR" "CAMPECHE" ...
#> ..$ ABREVIATURA : chr [1:36] "AS" "BC" "BS" "CC" ...
#> $ ENTIDAD_RES : tibble [36 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE_ENTIDAD : chr [1:36] "01" "02" "03" "04" ...
#> ..$ ENTIDAD_FEDERATIVA: chr [1:36] "AGUASCALIENTES" "BAJA CALIFORNIA" "BAJA CALIFORNIA SUR" "CAMPECHE" ...
#> ..$ ABREVIATURA : chr [1:36] "AS" "BC" "BS" "CC" ...
#> $ ENTIDAD_NAC : tibble [36 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ CLAVE_ENTIDAD : chr [1:36] "01" "02" "03" "04" ...
#> ..$ ENTIDAD_FEDERATIVA: chr [1:36] "AGUASCALIENTES" "BAJA CALIFORNIA" "BAJA CALIFORNIA SUR" "CAMPECHE" ...
#> ..$ ABREVIATURA : chr [1:36] "AS" "BC" "BS" "CC" ...
por ejemplo para ver el diccionario de antígeno:
datos_covid$dict$RESULTADO_ANTIGENO
#> # A tibble: 3 × 2
#> CLAVE DESCRIPCIÓN
#> <dbl> <chr>
#> 1 1 POSITIVO A SARS-COV-2
#> 2 2 NEGATIVO A SARS-COV-2
#> 3 97 NO APLICA (CASO SIN MUESTRA)
¿Se te fue el Internet? No te preocupes,
descarga_datos_abiertos
trabajará con tu descarga más reciente.
Lectura desde duckdb
No es necesario volver a descargar si reinicias tu sesión de
R
siempre y cuando los hayas guardado en
duckdb
estableciendo un dbdir
(de lo contrario
la base de datos sólo dura lo que dure tu sesión de R
).
Puedes sólo leer los datos abiertos que ya tienes usando la función
read_datos_abiertos.R
;
read_datos_abiertos(base_duck, tblname = "tutorial") |> glimpse()
#> List of 3
#> $ dats :List of 2
#> ..$ FECHA_ACTUALIZACION :List of 2
#> .. ..$ con :Formal class 'duckdb_connection' [package "duckdb"] with 6 slots
#> .. ..$ disco: NULL
#> .. ..- attr(*, "class")= chr [1:4] "src_duckdb_connection" "src_dbi" "src_sql" "src"
#> ..$ ID_REGISTRO :List of 12
#> .. ..$ x :List of 12
#> .. .. ..- attr(*, "class")= chr [1:2] "lazy_select_query" "lazy_query"
#> .. ..$ select : tibble [40 × 5] (S3: tbl_df/tbl/data.frame)
#> .. ..$ where : NULL
#> .. ..$ group_by : NULL
#> .. ..$ order_by : NULL
#> .. ..$ distinct : logi FALSE
#> .. ..$ limit : NULL
#> .. ..$ select_operation : chr "mutate"
#> .. ..$ message_summarise: NULL
#> .. ..$ group_vars : chr(0)
#> .. ..$ order_vars : NULL
#> .. ..$ frame : NULL
#> .. ..- attr(*, "class")= chr [1:2] "lazy_select_query" "lazy_query"
#> ..- attr(*, "class")= chr [1:5] "tbl_duckdb_connection" "tbl_dbi" "tbl_sql" "tbl_lazy" ...
#> $ disconnect:function (quiet = FALSE)
#> $ dict :List of 31
#> ..$ ORIGEN : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ SECTOR : tibble [14 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ SEXO : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ PACIENTE : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ NACIONALIDAD : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ RESULTADO_LAB : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ RESULTADO_ANTIGENO : tibble [3 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CLASIFICACION_FINAL : tibble [7 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ MUNICIPIO_RES : tibble [2,501 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ INTUBADO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ NEUMONIA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ EMBARAZO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ HABLA LENGUA INDIGENA: tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ INDIGENA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ DIABETES : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ EPOC : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ ASMA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ INMUSUPR : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ HIPERTENSION : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ CARDIOVASCULAR : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ OTRO_CASO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ TOMA_MUESTRA_LAB : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ TOMA_MUESTRA_ANTIGENO: tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ OTRA_COMORBILIDAD : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ OBESIDAD : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ RENAL_CRONICA : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ TABAQUISMO : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ UCI : tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
#> ..$ ENTIDAD_UM : tibble [36 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ ENTIDAD_RES : tibble [36 × 3] (S3: tbl_df/tbl/data.frame)
#> ..$ ENTIDAD_NAC : tibble [36 × 3] (S3: tbl_df/tbl/data.frame)
El proceso de descarga de cualquier base de covidmx
es
un proceso inteligente. Si no ha pasado más de un día desde que
descargaste la base el programa te advertirá de que no tiene sentido
volver a descargar.
Podemos ver un ejemplo descargando sólo el diccionario (que ya
descargamos arriba con descarga_datos_abiertos
)
diccionario_datos <- descarga_diccionario()
#> Warning: La descarga mas reciente de fue hace 0.01335 dias. Como tiene menos de un dia
#> usare esa. Escribe `force_download = TRUE` si quieres descargar de todas
#> formas. Para desactivar este mensaje `show_warnings = FALSE.`
Si de todas maneras quieres reintentar la descarga puedes usar
force_download = TRUE
diccionario_datos <- descarga_diccionario(force_download = TRUE)
lo cual verificará mediante pins
que la base en
línea sea distinta de la que tienes almacenada y en caso afirmativo
descargará los datos.
Lectura de base de datos de zip
o csv
Si el proceso de descarga se interrumpe en algún momento puedes leer
los datos abiertos de zip
o bien del csv
descomprimido con read_datos_abiertos
también:
#Descarga sólo el zip
zip_path <- descarga_db_datos_abiertos_tbl(sites.covid = dlink, show_warnings = F, quiet = T)
datos_covid <- read_datos_abiertos(zip_path, tblname = "tutorial")
#O bien descomprime el zip y lee el csv
csv_path <- unzip_db_datos_abiertos_tbl(zip_path)
datos_covid <- read_datos_abiertos_csv(csv_path, tblname = "tutorial")
Lo mismo puedes hacer si tienes el diccionario descargado con las
variables diccionario_zip_path
,
diccionario_unzipped_path
y diccionario
para
cuando el diciconario es un archivo zip
, un archivo
xlsx
o un tibble
en tu sesiòn de
R
(respectivamente) como sigue:
#Descarga el diccionario en zip
zip_path <- descarga_db_diccionario_ssa()
datos_covid <- read_datos_abiertos(base_duck, diccionario_zip_path = zip_path, tblname = "tutorial")
Una vez descargados (o leídos), basta componer la base de datos con cualquiera de las funciones para tener una tabla de datos agregada por fecha y entidad.
Para terminar de usar los datos, nos desconectamos de la base con:
datos_covid$disconnect()
#> ✔ Desconectado
Lectura de la base de datos del tutorial
Para lo que sigue del tutorial usaremos los datos precargados:
datos_covid <- covidmx::datosabiertos #Uso de los datos precargados
Casos (Incidencia)
Las bases de datos se agregan a la lista bajo el nombre default
casos
. Por ejemplo:
datos_covid <- datos_covid |> casos()
El objeto casos
por default es un tibble
con el que ya puedes operar:
datos_covid$casos |> head()
#> # A tibble: 6 × 5
#> FECHA_SINTOMAS ENTIDAD_UM n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 139 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 03 519 BAJA CALIFORNIA SUR BS
#> 3 2021-07-02 00:00:00 02 164 BAJA CALIFORNIA BC
#> 4 2021-07-02 00:00:00 03 357 BAJA CALIFORNIA SUR BS
#> 5 2021-07-03 00:00:00 02 170 BAJA CALIFORNIA BC
#> 6 2021-07-03 00:00:00 03 421 BAJA CALIFORNIA SUR BS
Nota que lo que hace es agregar por fecha y por entidad de la unidad médica los casos.
Se puede filtar por entidad de la unidad médica seleccionando las entidades de interés:
#> # A tibble: 6 × 5
#> FECHA_SINTOMAS ENTIDAD_UM n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 139 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 03 519 BAJA CALIFORNIA SUR BS
#> 3 2021-07-02 00:00:00 02 164 BAJA CALIFORNIA BC
#> 4 2021-07-02 00:00:00 03 357 BAJA CALIFORNIA SUR BS
#> 5 2021-07-03 00:00:00 02 170 BAJA CALIFORNIA BC
#> 6 2021-07-03 00:00:00 03 421 BAJA CALIFORNIA SUR BS
Si se quiere filtrar por entidad de nacimiento y que la fecha sea la de ingreso, por ejemplo:
datos_covid |>
casos(entidades = "BAJA CALIFORNIA",
entidad_tipo = "Nacimiento",
fecha_tipo = "Ingreso",
list_name = "DB_Filtro_Nac")
#> # A tibble: 6 × 5
#> FECHA_INGRESO ENTIDAD_NAC n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 9 BAJA CALIFORNIA BC
#> 2 2021-07-02 00:00:00 02 33 BAJA CALIFORNIA BC
#> 3 2021-07-03 00:00:00 02 14 BAJA CALIFORNIA BC
#> 4 2021-07-04 00:00:00 02 16 BAJA CALIFORNIA BC
#> 5 2021-07-05 00:00:00 02 156 BAJA CALIFORNIA BC
#> 6 2021-07-06 00:00:00 02 119 BAJA CALIFORNIA BC
Finalmente, si sólo se desean casos confirmados e inválidos:
datos_covid |>
casos(entidades = "BAJA CALIFORNIA",
entidad_tipo = "Nacimiento",
fecha_tipo = "Ingreso",
tipo_clasificacion = c("Confirmados COVID", "Invalido"),
list_name = "BC_conf_inv")
#> # A tibble: 6 × 5
#> FECHA_INGRESO ENTIDAD_NAC n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 3 BAJA CALIFORNIA BC
#> 2 2021-07-02 00:00:00 02 3 BAJA CALIFORNIA BC
#> 3 2021-07-03 00:00:00 02 4 BAJA CALIFORNIA BC
#> 4 2021-07-04 00:00:00 02 1 BAJA CALIFORNIA BC
#> 5 2021-07-05 00:00:00 02 24 BAJA CALIFORNIA BC
#> 6 2021-07-06 00:00:00 02 26 BAJA CALIFORNIA BC
Nota que por default el programa rellena con ceros lo que no se
observó. Si quieres cancelar esta opción basta con cambiar
fill_zeros = FALSE
:
datos_covid |>
casos(entidades = c("QUINTANA ROO","AGUASCALIENTES"),
entidad_tipo = "Nacimiento",
fecha_tipo = "Ingreso",
tipo_clasificacion = c("Confirmados COVID", "Invalido"),
list_name = "Sin fill zeros",
fill_zeros = FALSE)
#> # A tibble: 6 × 5
#> FECHA_INGRESO ENTIDAD_NAC n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-05 00:00:00 01 1 AGUASCALIENTES AS
#> 2 2021-07-09 00:00:00 23 1 QUINTANA ROO QR
#> 3 2021-07-11 00:00:00 01 1 AGUASCALIENTES AS
#> 4 2021-07-12 00:00:00 01 1 AGUASCALIENTES AS
#> 5 2021-07-18 00:00:00 01 1 AGUASCALIENTES AS
#> 6 2021-07-19 00:00:00 01 1 AGUASCALIENTES AS
Si se desea que los casos vengan agregados (es decir
QUINTANA ROO + AGUASCALIENTES
) se puede cambiar la opción
de group_by_entidad
a FALSE
:
datos_covid |>
casos(entidades = c("QUINTANA ROO","AGUASCALIENTES"),
entidad_tipo = "Nacimiento",
fecha_tipo = "Ingreso",
tipo_clasificacion = c("Confirmados COVID", "Invalido"),
group_by_entidad = FALSE,
list_name = "QROO_AGS_juntos")
#> # A tibble: 6 × 2
#> FECHA_INGRESO n
#> <dttm> <int>
#> 1 2021-07-01 00:00:00 0
#> 2 2021-07-02 00:00:00 0
#> 3 2021-07-03 00:00:00 0
#> 4 2021-07-04 00:00:00 0
#> 5 2021-07-05 00:00:00 1
#> 6 2021-07-06 00:00:00 0
La variable edad_cut
te permite quedarte sòlo con un
grupo de edad o bien definir múltiples. Por ejemplo para quedarte sólo
con los casos de 5 a 25 años:
#> # A tibble: 6 × 6
#> FECHA_SINTOMAS EDAD_CAT ENTIDAD_UM n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <fct> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 [5,25] 02 40 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 [5,25] 03 132 BAJA CALIFORNIA SUR BS
#> 3 2021-07-02 00:00:00 [5,25] 02 35 BAJA CALIFORNIA BC
#> 4 2021-07-02 00:00:00 [5,25] 03 93 BAJA CALIFORNIA SUR BS
#> 5 2021-07-03 00:00:00 [5,25] 02 35 BAJA CALIFORNIA BC
#> 6 2021-07-03 00:00:00 [5,25] 03 114 BAJA CALIFORNIA SUR BS
O bien definir grupos de edad de la forma 0-20
,
20-60
y 60+
#> # A tibble: 6 × 6
#> FECHA_SINTOMAS EDAD_CAT ENTIDAD_UM n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <fct> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 [0,20] 02 23 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 [0,20] 03 72 BAJA CALIFORNIA SUR BS
#> 3 2021-07-01 00:00:00 (20,60] 02 107 BAJA CALIFORNIA BC
#> 4 2021-07-01 00:00:00 (20,60] 03 426 BAJA CALIFORNIA SUR BS
#> 5 2021-07-01 00:00:00 (60,Inf] 02 9 BAJA CALIFORNIA BC
#> 6 2021-07-01 00:00:00 (60,Inf] 03 21 BAJA CALIFORNIA SUR BS
Puedes acumular diferentes bases de datos en la misma lista asignándoles nombres:
datos_covid <- datos_covid |>
casos(list_name = "Todos por entidad") |>
casos(list_name = "Todos (nacional)", group_by_entidad = FALSE) |>
casos(list_name = "Defunciones (todos)", defunciones = TRUE)
datos_covid$`Todos (nacional)` |> head()
#> # A tibble: 6 × 2
#> FECHA_SINTOMAS n
#> <dttm> <int>
#> 1 2021-07-01 00:00:00 658
#> 2 2021-07-02 00:00:00 521
#> 3 2021-07-03 00:00:00 591
#> 4 2021-07-04 00:00:00 643
#> 5 2021-07-05 00:00:00 736
#> 6 2021-07-06 00:00:00 728
datos_covid$`Todos por entidad` |> head()
#> # A tibble: 6 × 5
#> FECHA_SINTOMAS ENTIDAD_UM n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 139 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 03 519 BAJA CALIFORNIA SUR BS
#> 3 2021-07-02 00:00:00 02 164 BAJA CALIFORNIA BC
#> 4 2021-07-02 00:00:00 03 357 BAJA CALIFORNIA SUR BS
#> 5 2021-07-03 00:00:00 02 170 BAJA CALIFORNIA BC
#> 6 2021-07-03 00:00:00 03 421 BAJA CALIFORNIA SUR BS
datos_covid$`Defunciones (todos)` |> head()
#> # A tibble: 6 × 5
#> FECHA_SINTOMAS ENTIDAD_UM n ENTIDAD_FEDERATIVA ABREVIATURA
#> <dttm> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 3 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 03 24 BAJA CALIFORNIA SUR BS
#> 3 2021-07-02 00:00:00 02 4 BAJA CALIFORNIA BC
#> 4 2021-07-02 00:00:00 03 5 BAJA CALIFORNIA SUR BS
#> 5 2021-07-03 00:00:00 02 4 BAJA CALIFORNIA BC
#> 6 2021-07-03 00:00:00 03 18 BAJA CALIFORNIA SUR BS
Hay múltiples opciones permitiendo seleccionar variables específicas
de unidades de cuidado intensivo, defunciones y si devolver la tabla
como tibble
o como conexión de dbplyr
a
MARIADB
:
datos_covid <- datos_covid |>
casos(
#Lista de entidades que deseas
entidades = c("AGUASCALIENTES", "BAJA CALIFORNIA", "BAJA CALIFORNIA SUR",
"CAMPECHE", "CHIAPAS", "CHIHUAHUA","CIUDAD DE M\u00c9XICO",
"COAHUILA DE ZARAGOZA" , "COLIMA", "DURANGO", "GUANAJUATO",
"GUERRERO","HIDALGO", "JALISCO", "M\u00c9XICO",
"MICHOAC\u00c1N DE OCAMPO", "MORELOS","NAYARIT",
"NUEVO LE\u00d3N", "OAXACA", "PUEBLA", "QUER\u00c9TARO",
"QUINTANA ROO", "SAN LUIS POTOS\u00cd", "SINALOA", "SONORA",
"TABASCO", "TAMAULIPAS", "TLAXCALA", "VERACRUZ DE IGNACIO DE LA LLAVE",
"YUCAT\u00c1N", "ZACATECAS"),
#Si quieres que los resultados salgan por entidad = TRUE o ya agregados = FALSE
group_by_entidad = TRUE,
#Selecciona esas entidades a qué tipo de entidad refieren: Unidad Médica, Residencia, Nacimiento
entidad_tipo = "Nacimiento", #c("Unidad Medica", "Residencia", "Nacimiento"),
#Selecciona la fecha para la base de datos: Síntomas, Ingreso, Defunción
fecha_tipo = "Ingreso",
#Selecciona todas las variables de clasificación que deseas agregar:
tipo_clasificacion = c("Sospechosos","Confirmados COVID", "Negativo a COVID", "Inválido",
"No realizado"),
#Selecciona si deseas agrupar por la variable tipo_clasificacion
group_by_tipo_clasificacion = TRUE,
#Selecciona todos los pacientes quieres incluir:
tipo_paciente = c("AMBULATORIO", "HOSPITALIZADO", "NO ESPECIFICADO"),
#Selecciona si agrupar por tipo de paciente
group_by_tipo_paciente = TRUE,
#Selecciona todas las opciones de Unidad de Cuidado Intensivo del paciente:
tipo_uci = c("SI","NO","NO APLICA","SE IGNORA","NO ESPECIFICADO"),
#Selecciona si agrupar por tipo de unidad
group_by_tipo_uci = TRUE,
#Selecciona los sectores del sistema de salud a incluir
tipo_sector = c("CRUZ ROJA", "DIF", "ESTATAL", "IMSS", "IMSS-BIENESTAR", "ISSSTE",
"MUNICIPAL", "PEMEX", "PRIVADA", "SEDENA", "SEMAR", "SSA",
"UNIVERSITARIO","NO ESPECIFICADO"),
#Selecciona si deseas agrupar por tipo de sector
group_by_tipo_sector = FALSE,
#Selecciona si deseas sólo los que tuvieron defunción
defunciones = TRUE,
#Selecciona los grupos de edad que deseas incluir en rango
edad_cut = c(20, 40, 60), #Edades 20-40 y 40-60
#Selecciona si devolver el objeto como tibble
as_tibble = TRUE,
#Selecciona si rellenar los conteos (n) con ceros cuando no haya observaciones.
fill_zeros = TRUE,
#Nombre para llamarle en el objeto lista que regresa
list_name = "Ejemplo defunciones",
#Agrupa los resultados además por estado de diabetes y sexo
.grouping_vars = c("DIABETES", "SEXO"))
Puedes ver la base generada así:
datos_covid$`Ejemplo defunciones` |> head()
#> # A tibble: 6 × 14
#> FECHA_INGRESO DIABETES SEXO EDAD_…¹ ENTID…² CLASI…³ TIPO_…⁴ UCI n
#> <dttm> <int> <int> <fct> <chr> <dbl> <dbl> <dbl> <int>
#> 1 2021-07-01 00:00:00 2 2 [20,40] 03 3 2 2 1
#> 2 2021-07-03 00:00:00 2 1 [20,40] 03 3 2 2 1
#> 3 2021-07-03 00:00:00 2 2 [20,40] 02 7 2 1 1
#> 4 2021-07-03 00:00:00 2 2 (40,60] 03 3 2 2 1
#> 5 2021-07-03 00:00:00 2 2 (40,60] 26 3 2 2 1
#> 6 2021-07-03 00:00:00 98 2 (40,60] 03 3 2 2 1
#> # … with 5 more variables: ENTIDAD_FEDERATIVA <chr>, ABREVIATURA <chr>,
#> # `CLASIFICACI\032N` <chr>, DESCRIPCION_TIPO_PACIENTE <chr>,
#> # DESCRIPCION_TIPO_UCI <chr>, and abbreviated variable names ¹EDAD_CAT,
#> # ²ENTIDAD_NAC, ³CLASIFICACION_FINAL, ⁴TIPO_PACIENTE
Número de pruebas
Para calcular el número de pruebas los argumentos son los mismos que
la función de casos
con el agregado de que
tipo_prueba
es un vector donde se seleccionan las pruebas a
considerar (Antígeno
o PCR
) y
group_by_tipo_prueba
agrupa los resultados por tipo de
prueba
datos_covid <- datos_covid |>
numero_pruebas(entidades = c("BAJA CALIFORNIA","BAJA CALIFORNIA SUR"),
tipo_prueba = c("Antigeno", "PCR"),
group_by_tipo_prueba = TRUE)
datos_covid$numero_pruebas |> head()
#> # A tibble: 6 × 6
#> FECHA_SINTOMAS ENTIDAD_UM TIPO_PRUEBA n ENTIDAD_FEDERATIVA ABREVIA…¹
#> <dttm> <chr> <chr> <int> <chr> <chr>
#> 1 2021-07-01 00:00:00 02 ANTIGENO 125 BAJA CALIFORNIA BC
#> 2 2021-07-01 00:00:00 02 PCR 21 BAJA CALIFORNIA BC
#> 3 2021-07-01 00:00:00 03 ANTIGENO 479 BAJA CALIFORNIA SUR BS
#> 4 2021-07-01 00:00:00 03 PCR 69 BAJA CALIFORNIA SUR BS
#> 5 2021-07-02 00:00:00 02 ANTIGENO 143 BAJA CALIFORNIA BC
#> 6 2021-07-02 00:00:00 02 PCR 36 BAJA CALIFORNIA BC
#> # … with abbreviated variable name ¹ABREVIATURA
datos_covid$numero_pruebas |>
plot_covid(facet_ncol = 2, date_break_format = "1 month")
#> ! `df_variable` no fue especificada. Usaremos la columna n
#> ! `df_covariates` no fue especificada. Usaremos `TIPO_PRUEBA and ENTIDAD_FEDERATIVA`
Positividad
Para calcular la positividad la única forma actual es con un
tibble
. Los argumentos son los mismos que la función de
casos
con el agregado de que tipo_prueba
es un
vector donde se seleccionan las pruebas a considerar
(Antígeno
o PCR
) y
group_by_tipo_prueba
agrupa los resultados por tipo de
prueba. La variable remove_inconclusive
es una booleana
(default TRUE
) que elimina del denominador de la
positividad las pruebas sin resultado o con resultado no
concluyente.
Nota Positividad es la variable más lenta de calcular por ahora. Ten paciencia
datos_covid <- datos_covid |>
positividad(entidades = c("BAJA CALIFORNIA","BAJA CALIFORNIA SUR"),
tipo_prueba = c("Antigeno", "PCR"),
group_by_tipo_prueba = TRUE)
datos_covid$positividad |> head()
#> # A tibble: 6 × 8
#> Positivi…¹ FECHA_SINTOMAS ENTID…² TIPO_…³ ENTID…⁴ ABREV…⁵ n_pru…⁶ n_pos…⁷
#> <dbl> <dttm> <chr> <chr> <chr> <chr> <int> <int>
#> 1 0.5 2021-07-01 00:00:00 02 PCR BAJA C… BC 20 10
#> 2 0.594 2021-07-01 00:00:00 03 PCR BAJA C… BS 64 38
#> 3 0.5 2021-07-02 00:00:00 02 PCR BAJA C… BC 34 17
#> 4 0.519 2021-07-02 00:00:00 03 PCR BAJA C… BS 52 27
#> 5 0.517 2021-07-03 00:00:00 02 PCR BAJA C… BC 29 15
#> 6 0.755 2021-07-03 00:00:00 03 PCR BAJA C… BS 53 40
#> # … with abbreviated variable names ¹Positividad, ²ENTIDAD_UM, ³TIPO_PRUEBA,
#> # ⁴ENTIDAD_FEDERATIVA, ⁵ABREVIATURA, ⁶n_pruebas, ⁷n_positivos
datos_covid$positividad |>
plot_covid(facet_ncol = 2,
facet_scale = "fixed",
type = "spline",
df_variable = "Positividad",
date_break_format = "7 days",
date_labels_format = "%d/%m/%Y",
df_covariates = c("TIPO_PRUEBA", "ENTIDAD_FEDERATIVA"))
Case Hospitalization Rate
El chr
se define como el total de casos confirmados que
terminaron hospitalizados entre el total de confirmados: \[
\textrm{CHR} = \frac{\text{Hospitalizados Confirmados}}{\text{Todos los
confirmados}}
\] lo puedes calcular con chr
:
datos_covid <- datos_covid |> chr()
#> # A tibble: 6 × 5
#> FECHA_SINTOMAS ENTIDAD_UM ENTIDAD_FEDERATIVA ABREVIATURA CASE HOSPITAL…¹
#> <dttm> <chr> <chr> <chr> <dbl>
#> 1 2021-07-01 00:00:00 02 BAJA CALIFORNIA BC 0.25
#> 2 2021-07-01 00:00:00 03 BAJA CALIFORNIA SUR BS 0.183
#> 3 2021-07-02 00:00:00 02 BAJA CALIFORNIA BC 0.355
#> 4 2021-07-02 00:00:00 03 BAJA CALIFORNIA SUR BS 0.0787
#> 5 2021-07-03 00:00:00 02 BAJA CALIFORNIA BC 0.0882
#> 6 2021-07-03 00:00:00 03 BAJA CALIFORNIA SUR BS 0.122
#> # … with abbreviated variable name ¹`CASE HOSPITALIZATION RATE`
Las variables para agrupar son casi las mismas que en
casos
. Por ejemplo si queremos agrupar el chr
en distintas categorías de edad a nivel nacional:
datos_covid <- datos_covid |>
chr(
group_by_entidad = FALSE,
edad_cut = c(0, 20, 50, Inf),
list_name = "CHR_edad_nacional"
)
datos_covid |>
plot_covid(type = "line",
facet_ncol = 4,
date_break_format = "7 days",
date_labels_format = "%d/%m/%Y",
df_name = "CHR_edad_nacional")
Case Fatality Rate
El cfr
se define como el total de casos confirmados que
terminaron muertos: \[
\textrm{CFR} = \frac{\text{Defunciones Confirmadas}}{\text{Todos los
confirmados}}
\] lo puedes calcular con cfr
:
datos_covid <- datos_covid |> cfr()
#> # A tibble: 6 × 5
#> FECHA_SINTOMAS ENTIDAD_UM ENTIDAD_FEDERATIVA ABREVIATURA CASE FATALITY…¹
#> <dttm> <chr> <chr> <chr> <dbl>
#> 1 2021-07-01 00:00:00 02 BAJA CALIFORNIA BC 0.125
#> 2 2021-07-01 00:00:00 03 BAJA CALIFORNIA SUR BS 0.0935
#> 3 2021-07-02 00:00:00 02 BAJA CALIFORNIA BC 0.0645
#> 4 2021-07-02 00:00:00 03 BAJA CALIFORNIA SUR BS 0.0281
#> 5 2021-07-03 00:00:00 02 BAJA CALIFORNIA BC 0.0588
#> 6 2021-07-03 00:00:00 03 BAJA CALIFORNIA SUR BS 0.0699
#> # … with abbreviated variable name ¹`CASE FATALITY RATE`
Las variables para agrupar son casi las mismas que en
casos
. Por ejemplo si queremos agrupar el cfr
en distintas categorías de edad a nivel nacional:
datos_covid <- datos_covid |>
cfr(entidades = c("BAJA CALIFORNIA", "BAJA CALIFORNIA SUR"),
group_by_entidad = TRUE,
list_name = "CFR_BC"
)
datos_covid$CFR_BC |>
plot_covid(type = "line",
facet_ncol = 2,
date_break_format = "7 days",
date_labels_format = "%d/%m/%Y")
Podemos también calcular la mortalidad dentro de los hospitalizados y ambulatorios:
datos_covid <- datos_covid |>
cfr(
tipo_paciente = "HOSPITALIZADO",
group_by_entidad = FALSE,
list_name = "CFR_HOSPITALIZADOS"
)
datos_covid |>
plot_covid(df_name = "CFR_HOSPITALIZADOS",
type = "line",
facet_ncol = 2,
date_break_format = "7 days",
date_labels_format = "%d/%m/%Y",
df_variable = "CASE FATALITY RATE")
Número efectivo de reproducción
El número efectivo de reproducción se estima mediante la función
EpiEstim::estimate_R
para la cual es necesario especificar
el método y el intervalo serial como
en este ejemplo.
Podemos estimar el número a nivel nacional a partir de 2022:
datos_covid <- datos_covid |>
estima_rt(entidades = "BAJA CALIFORNIA",
min_date = as.Date("2021/07/01", format = "%Y/%m/%d"))
#> Warning: Returning more (or less) than 1 row per `summarise()` group was deprecated in
#> dplyr 1.1.0.
#> ℹ Please use `reframe()` instead.
#> ℹ When switching from `summarise()` to `reframe()`, remember that `reframe()`
#> always returns an ungrouped data frame and adjust accordingly.
#> ℹ The deprecated feature was likely used in the covidmx package.
#> Please report the issue at <
#> # A tibble: 6 × 17
#> ENTIDA…¹ ENTID…² ABREV…³ t_start t_end Mean(…⁴ Std(R…⁵ Quant…⁶ Quant…⁷ Quant…⁸
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 02 BAJA C… BC 2 8 1.29 0.0359 1.22 1.23 1.27
#> 2 02 BAJA C… BC 3 9 1.16 0.0320 1.10 1.11 1.14
#> 3 02 BAJA C… BC 4 10 1.10 0.0300 1.04 1.05 1.08
#> 4 02 BAJA C… BC 5 11 1.07 0.0289 1.01 1.02 1.05
#> 5 02 BAJA C… BC 6 12 1.05 0.0283 0.994 1.00 1.03
#> 6 02 BAJA C… BC 7 13 1.04 0.0279 0.989 0.997 1.02
#> # … with 7 more variables: `Median(R)` <dbl>, `Quantile.0.75(R)` <dbl>,
#> # `Quantile.0.95(R)` <dbl>, `Quantile.0.975(R)` <dbl>,
#> # FECHA_SINTOMAS_start <dttm>, FECHA_SINTOMAS_end <dttm>,
#> # FECHA_SINTOMAS <dttm>, and abbreviated variable names ¹ENTIDAD_UM,
#> # ²ENTIDAD_FEDERATIVA, ³ABREVIATURA, ⁴`Mean(R)`, ⁵`Std(R)`,
#> # ⁶`Quantile.0.025(R)`, ⁷`Quantile.0.05(R)`, ⁸`Quantile.0.25(R)`
O bien por entidad sólo con los confirmados covid:
datos_covid <- datos_covid |>
estima_rt(tipo_clasificacion = "Confirmados COVID",
list_name = "RT_confirmados_COVID",
min_date = as.Date("2021/07/01", format = "%Y/%m/%d"))
#> Warning: There were 23 warnings in `dplyr::summarise()`.
#> The first warning was:
#> ℹ In argument: `...$R`.
#> ℹ In group 1: `ENTIDAD_UM = "01"`, `ENTIDAD_FEDERATIVA = "AGUASCALIENTES"`,
#> `ABREVIATURA = "AS"`.
#> Caused by warning in `estimate_R_func()`:
#> ! You're estimating R too early in the epidemic to get the desired
#> posterior CV.
#> ℹ Run `dplyr::last_dplyr_warnings()` to see the 22 remaining warnings.
datos_covid$RT_confirmados_COVID |>
plot_covid(df_date_index = "FECHA_SINTOMAS",
df_variable = "Mean(R)",
df_covariates = "ENTIDAD_FEDERATIVA",
date_break_format = "7 days",
date_labels_format = "%d/%m/%Y")
Datos de variantes (GISAID)
Para descargar las variantes reportadas por la publicación diaria en Github del reporte nacional en RodrigoZepeda/VariantesCovid a partir de las variantes de GISAID puedes hacer:
variantes_covid <- descarga_datos_variantes_GISAID()
Los datos se ven así:
variantes_covid |> head()
#> # A tibble: 6 × 7
#> variant semana ano n freq Actualizacion Fuente
#> <chr> <int> <int> <int> <dbl> <dttm> <chr>
#> 1 VOI Epsilon 28 2020 1 1 2022-12-23 03:07:16 GISAID: https://www.…
#> 2 VOI Epsilon 38 2020 1 1 2022-12-23 03:07:16 GISAID: https://www.…
#> 3 VOC Delta 39 2020 1 1 2022-12-23 03:07:16 GISAID: https://www.…
#> 4 VOI Epsilon 46 2020 1 1 2022-12-23 03:07:16 GISAID: https://www.…
#> 5 VOI Epsilon 47 2020 2 1 2022-12-23 03:07:16 GISAID: https://www.…
#> 6 VOI Epsilon 48 2020 5 1 2022-12-23 03:07:16 GISAID: https://www.…
Por default
baja nacional pero también puedes usar
“cdmx”:
variantes_covid <- descarga_datos_variantes_GISAID("cdmx")
En este caso, la descarga también es inteligente y necesitas poner
force_download = TRUE
si ha pasado menos de un día de tu
última descarga (almacenada mediante pins
en cache) y
quieres volver a bajar los datos.
Puedes graficarlos con geom_stream
dentro de la librería
ggstream
:
library(ggplot2)
#Pasamos año y semana epidemiológica a fecha
variantes_covid <- variantes_covid |>
left_join(
data.frame(fecha = seq(as.Date("2020/01/03", format = "%Y/%m/%d"), as.Date(Sys.time()),
by = "7 days")) |>
mutate(ano = lubridate::epiyear(fecha)) |>
mutate(semana = lubridate::epiweek(fecha))
)
#> Joining with `by = join_by(semana, ano)`
#Graficamos
nvariantes <- length(unique(variantes_covid$variant))
ggplot(variantes_covid) +
ggstream::geom_stream(aes(x = fecha, y = n, fill = variant)) +
theme_void() +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 90, hjust = 1),
axis.line.x = element_line(),
axis.ticks.x = element_line()
) +
scale_x_date(date_breaks = "3 months", date_labels = "%b/%Y") +
scale_fill_manual("Variante", values = MetBrewer::met.brewer("Cross", n = nvariantes)) +
ggtitle("Variantes de COVID-19 en México")
No olvides citar a GISAID así como a la publicación diaria en RodrigoZepeda/VariantesCovid si las usas.
Datos de ocupación hospitalaria (Red IRAG)
Puedes descargar los datos de la Red
IRAG de ocupación hospitalaria a nivel estatal o a nivel unidad
médica mediante descarga_datos_red_irag
. Estos se obtienen
de la publicación diaria en RodrigoZepeda/CapacidadHospitalariaMX.
estatales <- descarga_datos_red_irag()
Los cuales se ven así:
estatales |> plot_covid(df_covariates = "Estado")
#> ! `df_variable` no fue especificada. Usaremos la columna Hospitalizados (%)
O bien por unidad médica:
unidad_medica <- descarga_datos_red_irag(nivel = "Unidad Médica")
que se ven así:
unidad_medica |> head()
#> # A tibble: 6 × 9
#> `Unidad médica` Estado Insti…¹ CLUES Hospi…² Venti…³ UCI y…⁴ Fecha
#> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl> <date>
#> 1 Hospital Regional de … México SSA/CC MCSS… 100 17 33 2020-04-01
#> 2 Hospital Juárez de Mé… Ciuda… SSA/CC DFSS… 100 89 89 2020-04-01
#> 3 Instituto Nacional de… Ciuda… SSA/CC DFSS… 100 0 0 2020-04-01
#> 4 Instituto Nacional de… Ciuda… SSA/CC DFSS… 100 94 94 2020-04-01
#> 5 Instituto Nacional de… Ciuda… SSA/CC DFSS… 100 50 50 2020-04-01
#> 6 Instituto Nacional de… Ciuda… SSA/CC DFSS… 100 10 10 2020-04-01
#> # … with 1 more variable: Actualizacion <dttm>, and abbreviated variable names
#> # ¹Institución, ²`Hospitalizados (%)`, ³`Ventilación (%)`,
#> # ⁴`UCI y Ventilación (%)`
En este caso, la descarga también es inteligente y necesitas poner
force_download = TRUE
si ha pasado menos de un día de tu
última descarga (almacenada mediante pins
en cache) y
quieres volver a bajar los datos.
No olvides citar a RED IRAG así como a la publicación diaria en RodrigoZepeda/CapacidadHospitalariaMX si las usas.
Gráficas
Para graficar puedes usar la función plot_covid
por
default grafica lo que està en datos_covid$casos
y
establecer cada cuándo hacer los cortes de fechas con
date_break_format
datos_covid |> plot_covid(date_break_format = "1 week")
#> ! `df_variable` no fue especificada. Usaremos la columna n
#> ! `df_covariates` no fue especificada. Usaremos `ENTIDAD_FEDERATIVA`
pero puedes pedir otra con el eje x más limpio:
datos_covid |> plot_covid("Todos (nacional)",
date_break_format = "1 week",
date_labels_format = "%m/%y")
#> ! `df_variable` no fue especificada. Usaremos la columna n
#> ! `df_covariates` no fue especificada. Usaremos ``
Para visualizar un suavizamiento con splines cambia el
type
y dale las opciones que darías a
geom_spline
:
datos_covid |>
plot_covid("Todos (nacional)", type = "spline", spar = 0.5, date_break_format = "1 week")
#> ! `df_variable` no fue especificada. Usaremos la columna n
#> ! `df_covariates` no fue especificada. Usaremos ``
Puedes visualizar hasta dos covariables a la vez con
df_covariates
y decirle cuál graficar con
df_variable
:
datos_covid |>
plot_covid("Ejemplo defunciones",
df_variable = "n",
df_covariates = c("SEXO","ENTIDAD_FEDERATIVA"),
date_break_format = "3 weeks",
type = "area")
Desconexión
No olvides, cuando termines de usar duckdb
desconectarte:
datos_covid$disconnect()
#> ✔ Desconectado
Información adicional
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#> setting value
#> version R version 4.2.2 (2022-10-31)
#> os macOS Big Sur ... 10.16
#> system x86_64, darwin17.0
#> ui X11
#> language es
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz America/Mexico_City
#> date 2023-02-15
#> pandoc 2.19.2 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/ (via rmarkdown)
#>
#> ─ Packages ───────────────────────────────────────────────────────────────────
#> package * version date (UTC) lib source
#> assertthat 0.2.1 2019-03-21 [2] CRAN (R 4.2.0)
#> bit 4.0.5 2022-11-15 [2] CRAN (R 4.2.1)
#> bit64 4.0.5 2020-08-30 [2] CRAN (R 4.2.0)
#> bitops 1.0-7 2021-04-24 [2] CRAN (R 4.2.0)
#> blob 1.2.3 2022-04-10 [2] CRAN (R 4.2.0)
#> bslib 0.4.2 2022-12-16 [2] CRAN (R 4.2.0)
#> cachem 1.0.6 2021-08-19 [2] CRAN (R 4.2.0)
#> cellranger 1.1.0 2016-07-27 [2] CRAN (R 4.2.0)
#> cli 3.6.0 2023-01-09 [2] CRAN (R 4.2.2)
#> coarseDataTools 0.6-6 2021-12-09 [2] CRAN (R 4.2.0)
#> coda 0.19-4 2020-09-30 [2] CRAN (R 4.2.0)
#> colorspace 2.1-0 2023-01-23 [2] CRAN (R 4.2.2)
#> covidmx * 0.7.6 2023-02-15 [1] local
#> crayon 1.5.2 2022-09-29 [2] CRAN (R 4.2.0)
#> curl 5.0.0 2023-01-12 [2] CRAN (R 4.2.2)
#> DBI 1.1.3 2022-06-18 [2] CRAN (R 4.2.0)
#> dbplyr 2.3.0 2023-01-16 [2] CRAN (R 4.2.2)
#> desc 1.4.2 2022-09-08 [2] CRAN (R 4.2.0)
#> digest 0.6.31 2022-12-11 [2] CRAN (R 4.2.1)
#> dplyr * 1.1.0 2023-01-29 [2] CRAN (R 4.2.2)
#> duckdb 0.7.0 2023-02-14 [2] CRAN (R 4.2.2)
#> ellipsis 0.3.2 2021-04-29 [2] CRAN (R 4.2.0)
#> EpiEstim 2.2-4 2021-01-07 [2] CRAN (R 4.2.0)
#> evaluate 0.20 2023-01-17 [2] CRAN (R 4.2.2)
#> fansi 1.0.4 2023-01-22 [2] CRAN (R 4.2.2)
#> farver 2.1.1 2022-07-06 [2] CRAN (R 4.2.0)
#> fastmap 1.1.0 2021-01-25 [2] CRAN (R 4.2.0)
#> fitdistrplus 1.1-8 2022-03-10 [2] CRAN (R 4.2.0)
#> forcats 1.0.0 2023-01-29 [2] CRAN (R 4.2.2)
#> fs 1.6.1 2023-02-06 [2] CRAN (R 4.2.2)
#> generics 0.1.3 2022-07-05 [2] CRAN (R 4.2.0)
#> ggforce 0.4.1 2022-10-04 [2] CRAN (R 4.2.1)
#> ggformula 0.10.2 2022-09-01 [2] CRAN (R 4.2.0)
#> ggplot2 * 3.4.1 2023-02-10 [2] CRAN (R 4.2.0)
#> ggridges 0.5.4 2022-09-26 [2] CRAN (R 4.2.0)
#> ggstance 0.3.6 2022-11-16 [2] CRAN (R 4.2.1)
#> ggstream 0.1.0 2021-05-06 [2] CRAN (R 4.2.0)
#> glue 1.6.2 2022-02-24 [2] CRAN (R 4.2.0)
#> gridExtra 2.3 2017-09-09 [2] CRAN (R 4.2.0)
#> gtable 0.3.1 2022-09-01 [2] CRAN (R 4.2.0)
#> haven 2.5.1 2022-08-22 [2] CRAN (R 4.2.0)
#> highr 0.10 2022-12-22 [2] CRAN (R 4.2.1)
#> hms 1.1.2 2022-08-19 [2] CRAN (R 4.2.0)
#> htmltools 0.5.4 2022-12-07 [2] CRAN (R 4.2.1)
#> httr 1.4.4 2022-08-17 [2] CRAN (R 4.2.0)
#> incidence 1.7.3 2020-11-04 [2] CRAN (R 4.2.0)
#> jquerylib 0.1.4 2021-04-26 [2] CRAN (R 4.2.0)
#> jsonlite 1.8.4 2022-12-06 [2] CRAN (R 4.2.0)
#> knitr 1.42 2023-01-25 [2] CRAN (R 4.2.2)
#> labeling 0.4.2 2020-10-20 [2] CRAN (R 4.2.0)
#> labelled 2.10.0 2022-09-14 [2] CRAN (R 4.2.0)
#> lattice 0.20-45 2021-09-22 [2] CRAN (R 4.2.2)
#> lifecycle 1.0.3 2022-10-07 [2] CRAN (R 4.2.1)
#> lubridate 1.9.2 2023-02-10 [2] CRAN (R 4.2.0)
#> magrittr 2.0.3 2022-03-30 [2] CRAN (R 4.2.0)
#> MASS 7.3-58.2 2023-01-23 [2] CRAN (R 4.2.2)
#> Matrix 1.5-3 2022-11-11 [2] CRAN (R 4.2.0)
#> MatrixModels 0.5-1 2022-09-11 [2] CRAN (R 4.2.0)
#> mcmc 0.9-7 2020-03-21 [2] CRAN (R 4.2.0)
#> MCMCpack 1.6-3 2022-04-13 [2] CRAN (R 4.2.0)
#> memoise 2.0.1 2021-11-26 [2] CRAN (R 4.2.0)
#> MetBrewer 0.2.0 2022-03-21 [2] CRAN (R 4.2.0)
#> mosaicCore 0.9.2.1 2022-09-22 [2] CRAN (R 4.2.0)
#> munsell 0.5.0 2018-06-12 [2] CRAN (R 4.2.0)
#> pillar 1.8.1 2022-08-19 [2] CRAN (R 4.2.0)
#> pins 1.1.0 2023-01-21 [2] CRAN (R 4.2.2)
#> pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.2.0)
#> pkgdown 2.0.7 2022-12-14 [2] CRAN (R 4.2.0)
#> plyr 1.8.8 2022-11-11 [2] CRAN (R 4.2.0)
#> polyclip 1.10-4 2022-10-20 [2] CRAN (R 4.2.0)
#> purrr 1.0.1 2023-01-10 [2] CRAN (R 4.2.2)
#> quantreg 5.94 2022-07-20 [2] CRAN (R 4.2.0)
#> R6 2.5.1 2021-08-19 [2] CRAN (R 4.2.0)
#> ragg 1.2.5 2023-01-12 [2] CRAN (R 4.2.2)
#> rappdirs 0.3.3 2021-01-31 [2] CRAN (R 4.2.0)
#> Rcpp 1.0.10 2023-01-22 [2] CRAN (R 4.2.2)
#> RCurl 1.98-1.10 2023-01-27 [2] CRAN (R 4.2.0)
#> readr 2.1.4 2023-02-10 [2] CRAN (R 4.2.0)
#> readxl 1.4.2 2023-02-09 [2] CRAN (R 4.2.2)
#> reshape2 1.4.4 2020-04-09 [2] CRAN (R 4.2.0)
#> rlang 1.0.6 2022-09-24 [2] CRAN (R 4.2.0)
#> rmarkdown 2.20 2023-01-19 [2] CRAN (R 4.2.2)
#> rprojroot 2.0.3 2022-04-02 [2] CRAN (R 4.2.0)
#> rstudioapi 0.14 2022-08-22 [2] CRAN (R 4.2.0)
#> sass 0.4.5 2023-01-24 [2] CRAN (R 4.2.0)
#> scales 1.2.1 2022-08-20 [2] CRAN (R 4.2.0)
#> sessioninfo 1.2.2 2021-12-06 [2] CRAN (R 4.2.0)
#> SparseM 1.81 2021-02-18 [2] CRAN (R 4.2.0)
#> stringi 1.7.12 2023-01-11 [2] CRAN (R 4.2.2)
#> stringr 1.5.0 2022-12-02 [2] CRAN (R 4.2.1)
#> survival 3.5-3 2023-02-12 [2] CRAN (R 4.2.0)
#> systemfonts 1.0.4 2022-02-11 [2] CRAN (R 4.2.0)
#> textshaping 0.3.6 2021-10-13 [2] CRAN (R 4.2.0)
#> tibble 3.1.8 2022-07-22 [2] CRAN (R 4.2.0)
#> tidyr 1.3.0 2023-01-24 [2] CRAN (R 4.2.2)
#> tidyselect 1.2.0 2022-10-10 [2] CRAN (R 4.2.0)
#> timechange 0.2.0 2023-01-11 [2] CRAN (R 4.2.2)
#> tweenr 2.0.2 2022-09-06 [2] CRAN (R 4.2.0)
#> tzdb 0.3.0 2022-03-28 [2] CRAN (R 4.2.0)
#> utf8 1.2.3 2023-01-31 [2] CRAN (R 4.2.2)
#> vctrs 0.5.2 2023-01-23 [2] CRAN (R 4.2.2)
#> vroom 1.6.1 2023-01-22 [2] CRAN (R 4.2.2)
#> withr 2.5.0 2022-03-03 [2] CRAN (R 4.2.0)
#> xfun 0.37 2023-01-31 [2] CRAN (R 4.2.2)
#> yaml 2.3.7 2023-01-23 [2] CRAN (R 4.2.2)
#>
#> [1] /private/var/folders/42/2kdf45dd1qz5n7kf9lm8ld9r0000gn/T/RtmpQeTePG/temp_libpath141b01031a31c
#> [2] /Library/Frameworks/R.framework/Versions/4.2/Resources/library
#>
#> ──────────────────────────────────────────────────────────────────────────────