Skip to content

Commit

Permalink
mejoras taller ebola
Browse files Browse the repository at this point in the history
  • Loading branch information
Joskerus committed Nov 29, 2023
1 parent 421eda6 commit c26f98e
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 79 deletions.
139 changes: 60 additions & 79 deletions episodes/TallerEbola.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@ Al final de este taller usted podrá:

- Identificar los parámetros necesarios en casos de transmisión de enfermedades infecciosas de persona a persona.

- Estimar e interpretar la tasa de crecimiento y el tiempo en que se duplica la epidemia.
- Estimar la probabilidad de muerte (CFR).

- Estimar el intervalo serial a partir de los datos pareados de individuos infectantes/ individuos infectados.
- Calcular y graficar la incidencia.

- Estimar e interpretar el número de reproducción instantáneo de la epidemia
- Estimar e interpretar la tasa de crecimiento y el tiempo en que se duplica la epidemia.

- Estimar la probabilidad de muerte en los casos reportados (CFR)
- Estimar e interpretar el número de reproducción instantáneo de la epidemia.

- Calcular y graficar la incidencia

::::::::::::::::::::::::::::::::::::::::::::::::

Expand All @@ -55,14 +54,6 @@ Explicación del taller (10 minutos)

Realizar taller (100 minutos taller)

- [1. Preparación (5 minutos ejecución + 5 minutos solución)](#sección-1)

- [2. CFR (5 minutos explicación + 5 minutos ejecución + 5 minutos solución)](#sección-2)

- [3. Incidencia y 4. Tiempo de duplicación (10 minutos de explicación + 15 minutos de ejecución + 20 minutos solución y reflexión)](#sección-3)

- [5. Tiempo reproductivo instantáneo Rt (10 minutos explicación + 10 minutos lectura y ejecución + 10 minutos reflexión)](#sección-6)

Discusión 30 minutos

## Introducción
Expand Down Expand Up @@ -94,13 +85,14 @@ En esta práctica se desarrollarán los siguientes conceptos:

#### Preparación previa

Antes de comenzar, recuerde crear el proyecto en R `RProject`. Este paso no solo le ayudará a cumplir con las buenas prácticas de programación en R, sino también a mantener un directorio organizado, permitiendo un desarrollo exitoso del taller.
Antes de comenzar, descargue la carpeta con los datos y el proyecto desde [Carpetas de datos](https://drive.google.com/drive/folders/1T0uZ2FNhwFAnFcCNxfLX8V6Ir3IsJO6y?usp=sharing) . Ahí mismo encontrará un archivo .R para instalar las dependencias necesarias para este taller.

Recuerde abrir el archivo `RProject` denominado `Taller parametros.Rproj` antes de empezar a trabajar. Este paso no solo le ayudará a cumplir con las buenas prácticas de programación en R, sino también a mantener un directorio organizado, permitiendo un desarrollo exitoso del taller.

Puede descargar la carpeta con los datos y el proyecto desde [Carpetas de datos](https://drive.google.com/drive/folders/1T0uZ2FNhwFAnFcCNxfLX8V6Ir3IsJO6y?usp=sharing) . Ahí mismo encontrará un archivo .R para instalar las dependencias necesarias para este taller.

#### Cargue de librerías:

Cargue las librerías necesarias para el análisis epidemiológico y para análisis de incidencia y contactos. Los datos serán manipulados con tidyverse que es una colección de paquetes para la ciencia de datos.
Cargue las librerías necesarias para el análisis epidemiológico. Los datos serán manipulados con tidyverse que es una colección de paquetes para la ciencia de datos.

```{r echo=TRUE, message=FALSE, warning=FALSE, comment=""}
library(tidyverse) # contiene ggplot2, dplyr, tidyr, readr, purrr, tibble
Expand All @@ -114,40 +106,28 @@ library(EpiEstim) # para estimar R(t)

#### Cargue de bases de datos

Se le ha proporcionado la siguiente base de datos de casos `directorio_casos` y datos de contacto `contactos`:

`directorio_casos`: una base de datos de casos que contiene información de casos hasta el 1 de julio de 2014; y
Se le ha proporcionado la siguiente base de datos de casos `casos`:

`contactos_20140701.xlsx`: una lista de contactos reportados por los casos hasta el 1 de julio de 2014. “infectante” indica una fuente potencial de infección y “id_caso” con quién se tuvo el contacto.
`casos`: una base de datos de casos que contiene información de casos hasta el 1 de julio de 2014; y

Para leer en R, descargue estos archivos y use la función `read_xlsx` del paquete `readxl` para importar los datos y la función `read_rds` de `tidyverse`. Cada grupo de datos importados creará una tabla de datos almacenada como el objeto `tibble.`
Para leer en R este archivo, use la función `read_rds` de `tidyverse`. Se creará una tabla de datos almacenada como el objeto `tibble.`

```{r echo=TRUE, message=FALSE, warning=FALSE, comment=""}
directorio_casos <- read_rds("files/directorio_casos.rds")
```


```{r echo=TRUE, message=FALSE, warning=FALSE,comment=""}
contactos <- read_excel("files/contactos_20140701.xlsx", na = c("", "NA"))
casos <- read_rds("files/casos.rds")
```


#### Estructura de los datos

Explore la estructura de los datos. Para esto puede utilizar la función `glimpse` de `tidyverse` la cual nos proporciona una visión rápida y legible de la estructura interna de nuestros conjuntos de datos.

```{r echo=TRUE, message=FALSE, warning=FALSE,comment=""}
glimpse(contactos)
```


Como puede observar contactos tiene 3 columnas (variables) y 60 filas de datos. En un rápido vistazo puede observar que la columna `fuente` (fuente del contagio) puede contener entre sus valores otro o funeral. Así como que las tres variables están en formato de caracter (`chr`).
Explore la estructura de los datos. Para esto puede utilizar la función `glimpse` de `tidyverse` la cual nos proporciona una visión rápida y legible de la estructura interna de nuestro conjunto de datos.

```{r echo=TRUE, message=FALSE, warning=FALSE, comment=""}
glimpse(directorio_casos)
glimpse(casos)
```

En el caso del directorio de casos encuentra:
Como puede observar contactos tiene 11 columnas (variables) y 166 filas de datos. En un rápido vistazo puede observar el tipo de las variables por ejemplo, la columna `desenlace` tiene formato carácter (`chr`) y contiene entre sus valores "recuperación" o "muerte".

Además encuentra estas variables:

- El identificador `id_caso` al igual que en contactos

Expand Down Expand Up @@ -175,30 +155,41 @@ Note que las fechas ya están en formato fecha (`date`).
### Probabilidad de muerte en los casos reportados (`CFR`, por *Case Fatality Ratio*)

```{r echo=TRUE, message=FALSE, warning=FALSE,comment=""}
table(directorio_casos$desenlace, useNA = "ifany")
table(casos$desenlace, useNA = "ifany")
```

::::::::::::::::::::::::::::::::::::: challenge

Check warning on line 161 in episodes/TallerEbola.Rmd

View workflow job for this annotation

GitHub Actions / Build Full Site

check for the corresponding close tag

## Desafío 1

Calcule la probabilidad de muerte en los casos reportados (`CFR`) tomando el número de muertes y el número de casos con resultado conocido del objeto directorio_casos.
Calcule la probabilidad de muerte en los casos reportados (`CFR`) tomando el número de muertes y el número de casos con desenlace final conocido del objeto casos. Esta vez se calculará el `CFR` con el método `Naive`, Los cálculos `Naive` tienen el problema de que pueden tener sesgos. Hablaremos de estos sesgos en profundidad en el día 4.

Durante este taller se le presentarán algunos retos, para los cuales obtendrá algunas pistas, por ejemplo en el presente reto le presenta una pista, la cual es un fragmento del código que usted debe completar para alcanzar la solución. En los espacios donde dice `COMPLETE` por favor diligencie el código faltante.

```{r eval= FALSE, echo=TRUE, message=FALSE, warning=FALSE, comment=""}
numero_muertes <- #COMPLETE
muertes <- COMPLETE
numero_casos_resultado_conocido <- sum(directorio_casos$desenlace %in% c("Muerte", "Recuperacion"))
casos_desenlace_final_conocido <- sum(casos$desenlace %in% c("Muerte", "Recuperacion"))
CFR <- #COMPLETE / COMPLETE
CFR <- COMPLETE / COMPLETE
```

Ejemplo,

```{r eval= FALSE, echo=TRUE, message=FALSE, warning=FALSE, comment=""}
# RETO
muertes <- #COMPLETE
#Solución
muertes <- sum(casos$desenlace %in% "Muerte")
```

```{r echo=FALSE, message=FALSE, warning=FALSE, comment=""}
numero_muertes <- sum(directorio_casos$desenlace %in% "Muerte")
muertes <- sum(casos$desenlace %in% "Muerte")
numero_casos_resultado_conocido <- sum(directorio_casos$desenlace %in% c("Muerte", "Recuperacion"))
casos_desenlace_final_conocido <- sum(casos$desenlace %in% c("Muerte", "Recuperacion"))
CFR <- numero_muertes / numero_casos_resultado_conocido
CFR <- muertes / casos_desenlace_final_conocido
print(CFR)
```
Expand All @@ -210,60 +201,50 @@ print(CFR)

```{r, include = full_version}
numero_muertes <- sum(directorio_casos$desenlace %in% "Muerte")
muertes <- sum(casos$desenlace %in% "Muerte")
numero_casos_resultado_conocido <- sum(directorio_casos$desenlace %in% c("Muerte", "Recuperacion"))
casos_desenlace_final_conocido <- sum(casos$desenlace %in% c("Muerte", "Recuperacion"))
CFR <- numero_muertes / numero_casos_resultado_conocido
CFR <- muertes / casos_desenlace_final_conocido
print(CFR)
#Otra posible solución.
# numero_muertes <- directorio_casos %>%
# filter(desenlace == "Muerte") %>%
# tally()
#
# numero_casos_resultado_conocido <- directorio_casos %>%
# filter(desenlace %in% c("Muerte", "Recuperacion")) %>%
# tally()
#
# CFR <- numero_muertes$n / numero_casos_resultado_conocido$n
```

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

Luego, determine el CFR con sus intervalos de confianza utilizando la función `binom.confint`.
Para acompañar el calculo del CFR se pueden emplear sus intervalos de confianza para lo cual se puede usar la función `binom.confint`. La función `binom.confint` se utiliza para calcular intervalos de confianza para una proporción en una distribución binomial, que es por ejemplo cuando tenemos el total de infecciones con desenlace final conocido (recuperado o muerte). Esta función pide tres argumentos: 1) el número de muertes; 2) el número total de casos con desenlace final conocido, sin importar que hayan muerto o se hayan recuperado, pero no cuenta los datos con `NA`; 3) el método que se utilizará para calcular los intervalos de confianza, en este caso "`exact`" (método Clopper-Pearson).

La función `binom.confint` se utiliza para calcular intervalos de confianza para una proporción en una distribución binomial, que es por ejemplo cuando tenemos el total de infecciones con desenlace final conocido (recuperado o muerte). Esta función pide tres argumentos: 1) el número de muertes; 2) el número total de casos con desenlace final conocido, sin importar que hayan muerto o se hayan recuperado, pero no cuenta los datos con `NA`; 3) el método que se utilizará para calcular los intervalos de confianza, en este caso "`exact`" (método Clopper-Pearson).
::::::::::::::::::::::::::::::::::::: challenge

Check warning on line 217 in episodes/TallerEbola.Rmd

View workflow job for this annotation

GitHub Actions / Build Full Site

check for the corresponding close tag

## Desafío 2
```{r eval= FALSE, echo=TRUE, message=FALSE, warning=FALSE,comment=""}

CFR_con_CI <- binom.confint(COMPLETE, COMPLETE, method = "COMPLETE") %>%
kable(caption = "**¿QUE TITULO LE PONDRÍA?**")
Determine el CFR con sus intervalos de confianza utilizando la función `binom.confint`.
```{r echo=FALSE, message=FALSE, warning=FALSE, comment=""}
CFR_con_CI <- binom.confint(numero_muertes, casos_desenlace_final_conocido, method = "exact") %>%
kable(caption = "**CFR con intervalos de confianza**")
CFR_con_CI
```
:::::::::::::::::::::::: solution

Check warning on line 228 in episodes/TallerEbola.Rmd

View workflow job for this annotation

GitHub Actions / Build Full Site

check for the corresponding close tag

```{r echo=FALSE, message=FALSE, warning=FALSE, comment=""}
CFR_con_CI <- binom.confint(numero_muertes, numero_casos_resultado_conocido, method = "exact") %>%
kable(caption = "**CFR con intervalos de confianza**")
Recuerde diligenciar los espacios donde dice `COMPLETE`. Y obtenga este resultado

```{r eval= FALSE, echo=TRUE, message=FALSE, warning=FALSE,comment=""}
CFR_con_CI <- binom.confint(COMPLETE, COMPLETE, method = "COMPLETE") %>%
kable(caption = "**¿QUE TITULO LE PONDRÍA?**")
CFR_con_CI
```
:::::::::::::::::::::::::::::::::

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor

Check warning on line 241 in episodes/TallerEbola.Rmd

View workflow job for this annotation

GitHub Actions / Build Full Site

check for the corresponding close tag

## Solución 2

```{r, include = full_version}
CFR_con_CI <- binom.confint(numero_muertes,
numero_casos_resultado_conocido, method = "exact") %>%
casos_desenlace_final_conocido, method = "exact") %>%
kable(caption = "**CFR con intervalos de confianza**")
CFR_con_CI
Expand Down Expand Up @@ -302,7 +283,7 @@ incidencia_diaria
El resultado es un objeto de incidencia que contiene el recuento de casos para cada intervalo de tiempo, lo que facilita su visualización y análisis posterior. Como puede observar la función produjo los siguientes datos:

```{r echo=FALSE, message=FALSE, warning=FALSE, comment=""}
incidencia_diaria <- incidence(directorio_casos$fecha_inicio_sintomas)
incidencia_diaria <- incidence(casos$fecha_inicio_sintomas)
incidencia_diaria
```

Expand All @@ -311,7 +292,7 @@ incidencia_diaria
## Solución 3

```{r, include = full_version}
incidencia_diaria <- incidence(directorio_casos$fecha_inicio_sintomas)
incidencia_diaria <- incidence(casos$fecha_inicio_sintomas)
incidencia_diaria
```
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Expand Down Expand Up @@ -360,9 +341,9 @@ incidencia_semanal <- incidence(PRIMER ARGUMENTO, #COMPLETE


```{r echo=FALSE, message=FALSE, warning=FALSE, comment=""}
incidencia_semanal <- incidence(directorio_casos$fecha_inicio_sintomas,
incidencia_semanal <- incidence(casos$fecha_inicio_sintomas,
interval = 7,
last_date = max(directorio_casos$fecha_de_hospitalizacion,
last_date = max(casos$fecha_de_hospitalizacion,
na.rm = TRUE))
incidencia_semanal
plot(incidencia_semanal, border = "black")
Expand All @@ -375,9 +356,9 @@ plot(incidencia_semanal, border = "black")
## Solución 4

```{r, include = full_version}
incidencia_semanal <- incidence(directorio_casos$fecha_inicio_sintomas,
incidencia_semanal <- incidence(casos$fecha_inicio_sintomas,
interval = 7,
last_date = max(directorio_casos$fecha_de_hospitalizacion,
last_date = max(casos$fecha_de_hospitalizacion,
na.rm = TRUE))
incidencia_semanal
plot(incidencia_semanal, border = "black")
Expand Down Expand Up @@ -541,7 +522,7 @@ Si se grafica por fecha de inicio de síntomas mientras el brote está creciendo
Dado que esta epidemia es de ébola y la mayoría de los casos van a ser hospitalizados, es muy probable que la mayoría de las notificaciones ocurran en el momento de la hospitalización. De tal manera que podríamos examinar cuánto tiempo transcurre entre la fecha de inicio de síntomas y la fecha de hospitalización para hacernos una idea del rezago para esta epidemia.

```{r echo=TRUE, message=FALSE, warning=FALSE,comment=""}
summary(as.numeric(directorio_casos$fecha_de_hospitalizacion - directorio_casos$fecha_inicio_sintomas))
summary(as.numeric(casos$fecha_de_hospitalizacion - casos$fecha_inicio_sintomas))
```

Al restar la fecha de hopsitalización a la fecha de inicio de síntomas podría haber valores negativos. ¿Cual cree que sea su significado? ¿Ocurre en este caso?
Expand Down
File renamed without changes.
Binary file removed episodes/files/contactos_20140701.xlsx
Binary file not shown.

0 comments on commit c26f98e

Please sign in to comment.