Skip to content

Commit

Permalink
actualización tutoriales
Browse files Browse the repository at this point in the history
  • Loading branch information
Joskerus committed Dec 8, 2023
1 parent 6ca0115 commit 0915e3f
Show file tree
Hide file tree
Showing 2 changed files with 347 additions and 205 deletions.
154 changes: 98 additions & 56 deletions episodes/Vaccineff-tutorial.Rmd
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
title: "Tutorial Vaccineff: Introducción al cálculo de efectividad vacunal con cohortes"
title: "Tutorial Vaccineff: Introducción al cálculo de efectividad vacunal con cohortes usando vaccineff"
author: "David Santiago Quevedo, Santiago Loaiza, Zulma M. Cucunubá"
date: "2023-11-03"
output: html_document
Expand Down Expand Up @@ -244,13 +244,22 @@ $$V_{EFF} = 1 - HR$$

Para esta sesión se trabajará con el conjunto de datos de ejemplo incluido en
el paquete `vaccineff`. Adicionalmente, se utilizarán algunas funciones de los
paquetes `ggplot2` y `cowplot` para viazulizar algunos resultados.
Para cargar el set de datos y los paquetes en el espacio de trabajo ejecute:
paquetes `ggplot2` y `cowplot` para vizualizar algunos resultados.

```{r}
library(vaccineff)
library(ggplot2)
library(cowplot)
Para installar `vaccineff` ejecute las siguientes líneas en R:

```{r, eval=FALSE}
if(!require("pak")) install.packages("pak")
pak::pak("epiverse-trace/vaccineff@dev")
```

Posteriormente, para cargar los paquetes en el espacio de trabajo y el set de
datos de ejemplo del `vaccineff` ejecute:

```{R}
library("vaccineff")
library("ggplot2")
library("cowplot")
data(cohortdata)
head(cohortdata)
```
Expand Down Expand Up @@ -303,7 +312,7 @@ ggplot(data = cohortdata,
En un conjunto de datos típico de un estudio de cohorte se tiene
información desagregada por persona de la(s) dosis aplicada(s) durante
el seguimiento. En este sentido, es importante dimensionar el nivel de
cobertura en la vacunación alcanzado durante el seguimiento. Vaccineff
cobertura en la vacunación alcanzado durante el seguimiento. vaccineff
ofrece la función "plot_coverage" que permite llevar a cabo esta tarea
con facilidad. Para esto, ejecute el siguiente comando en R:

Expand Down Expand Up @@ -342,11 +351,29 @@ start_cohort <- as.Date("2044-01-01")
end_cohort <- as.Date("2044-12-31")
```

#### **4.2.2 Definir el tiempo de inducción del efecto *(delay)***
Para determinar la fecha de immunización, de un individuo `vaccineff` cuenta
con la función `get_immunization_date()`. Esta calcula la fecha de inmunización
seleccionando la vacuna que cumpla con el criterio de *fecha límite*
presentado en la siguiente figura.

![Esquema de fecha límite para selección de vacunas](img/limit_imm.png)

Ahora defina el "delay" de 14 días entre la fecha de la aplicación de la
vacuna y el momento del desarrollo de inmunidad protectora, para esto
escriba la siguiente inscripción en R y ejecútelo:
#### **4.2.2 Tiempo de inducción del efecto *(delay)***

En la figura anterior se introdujo el concepto de *delay*. El *delay del
desenlace* hace referencia al tiempo característico al desenlace desde que se un
individuo se infecta. Por otra parte, el *delay de la immunización* se refiere
al tiempo que se espera que transcurra antes de considerar que existe inmunidad
protectora. Cada uno de estas variables puede controlarse en la función
mediante los parámetros `outcome_delay` e `immunization_delay`, respectivamente.
El valor que se asigne a estas depende de la naturaleza del estudio.
En particular, para nuestra epidemia ejemplo utilizaremos `outcome_delay = 0`
dado que no es considerado como una variable relevante para determinar la fecha
límite en que la vacuna podría hacer efecto. Por otra parte, el valor asumido
para el de immunización es de 14 días.

Para calcular la fecha de immunización de cada individiduo escriba la siguiente
instrucción en R y ejecútela:

```{r}
cohortdata$immunization <-
Expand All @@ -363,10 +390,9 @@ cohortdata$immunization <-
Al ejecutar este comando, se añadirá una columna nueva al conjunto de
datos del caso de estudio, esta columna contiene una variable de tipo
"Date" que corresponde la fecha 14 días posteriores a la última dosis de
cualquiera de las dos vacunas utilizadas en el caso de estudio y se está
integrando el concepto de *delay* al tener en cuenta los 14 días que se
espera que transcurran antes de considerar que existe inmunidad
protectora. Puede evidenciar la nueva columna en el conjunto de datos.
cualquiera de las dos vacunas utilizadas en el caso de estudio, que cumpla con
el criterio de *fecha límite*. Puede evidenciar la nueva columna en el conjunto
de datos.

#### **4.2.3. Definir la exposición: cohorte vacunada y cohorte no vacunada**

Expand All @@ -383,12 +409,9 @@ cohortdata$vaccine_status <- set_status(
```

Al ejecutar el comando encontrará que se ha creado una nueva columna en
el conjunto de datos y podrá evidenciar en la base de datos que en la
nueva columna se consignó "vacc" o "unvacc" para cada uno de los
registros de acuerdo a su estado de vacunación de acuerdo a las
consideraciones del punto anterior, donde se integraron los *delay* y
para cualquiera de las dos vacunas que se utilizaron en el caso de
estudio.
el conjunto de datos con los valores "vacc" o "unvacc", para cada uno de los
registros de acuerdo con su estado de vacunación, el cual se determina a partir
de la variable `"immunization"`.

#### **4.2.3 Definir el desenlace: estado vivo vs estado fallecido**

Expand Down Expand Up @@ -439,7 +462,10 @@ la opción "start_from_immunization = FALSE" o desde la fecha de
inmunización. Para este último caso es necesario asignar
"start_from_immunization = TRUE" y pasar el nombre de la columna con la
información sobre la fecha de inmunización en el parámetro
"immunization_date_col"
"immunization_date_col". En la figura a continuación se presenta un esquema
de los dos métodos de cálculo del tiempo al evento.

![a) Tiempo al evento evaludado desde inicio de la cohorte. b) tiempo al evento desde la fecha de immunización](img/time-to-event.png)

### 4.3. Curvas de riesgo acumulado y supervivencia al desenlace en cada cohorte

Expand Down Expand Up @@ -506,23 +532,14 @@ el logaritmo del tiempo al evento, es posible identificar si los grupos
representan riesgos proporcionales cuando sus curvas se comportan de forma
aproximadamente paralela.

En el código a continuación se construyen las gráficas `loglog` haciendo uso
de las funciones de `vaccineff`. En el panel de la izquierda se testea la
hipótesis de riesgos proporcionales construyendo los tiempos al evento de forma
dinámica, es decir, a partir del momento en que se vacuna cada individuo de la
población, para lo que se asignan
`start_from_immunization = start_from_immunization` y
`immunization_date_col = "immunization`. Por otra parte, el en panel de la
derecha se teste la hipótesis con un modelo de tiempos al evento con punto
de inicio fijo, es decir tomando la fecha de inicio del estudio como punto de
inicio para el cálculo del tiempo al evento de ambos grupos.

Particularmente, se observa que el cálculo dinámico de los tiempos no satisface
riesgos proporcionales, por lo que pontencialmente será necesario realizar
algún tipo de estrategio para contrarestar los posibles sesgos muestrales
bajo este modelo.
A continuación se presentan las gráficas loglog obtenidas al construir
los tiempos al evento de forma dinámica (panel de la izquiera) y con punto
de inicio fijo (panel de la derecha). Particularmente, se observa que el
cálculo dinámico de los tiempos no satisface riesgos proporcionales,
por lo que pontencialmente necesitará algún tipo de estrategia para contrarestar
los posibles sesgos muestrales.

```{r}
```{r, echo=FALSE}
plot_loglog <- function(
df_cohort,
outcome_date_col,
Expand Down Expand Up @@ -588,33 +605,34 @@ plot_loglog <- function(
theme_classic() +
labs(x = "Log[Time to event] (Days)",
y = "Log[-Log[Survival probability]]") +
labs(colour = "Vaccine Status")
labs(colour = "Vaccine Status") +
scale_color_manual(
name = "Vaccine Status",
values = c("steelblue", "darkred"),
labels = c("v","u")
)
return(plt)
}
p1 <- plot_loglog(
df_cohort = cohortdata,
outcome_date_col = "death_date",
vaccine_date_cols = c("vaccine_date_1", "vaccine_date_2"),
vaccine_date_cols = c("vaccine_date_2"),
start_from_immunization = TRUE
) + ggtitle("Riesgos NO proporcionales")
p2 <- plot_loglog(
df_cohort = cohortdata,
outcome_date_col = "death_date",
vaccine_date_cols = c("vaccine_date_1", "vaccine_date_2")
vaccine_date_cols = c("vaccine_date_2"),
start_from_immunization = FALSE
) + ggtitle("Riesgos proporcionales")
plot_grid(p1,p2)
```

### **4.5. Estimación de la efectividad vacunal**

#### **4.5.1. Estimador Kaplan-Meier**

(FUNCIONES EN CONSTRUCCIÓN)

#### **Modelo de Cox**

En todos los estudios observacionales de efectividad vacunal de cohorte
Expand Down Expand Up @@ -643,21 +661,45 @@ coh_eff_noconf(

### **4.6 Cohorte dinámica - Emparejamiento poblacional**

(FUNCIONES EN CONSTRUCCIÓN)
El comando anterior arrojó la efectividad vacunal obtenida mediante el model de
Cox. Sin embargo, en la columna PH aparece la palabra rejected. Esto significa
que pese a que las curvas de ambos grupos son paralelas la evaluación de la
hipótesis de riesgos proporcionales haciendo uso del test de *Schoenfeld*
no es satisfactoria. Esto debido a los potenciales sesgos muestrales inducidos
por la estrategia de vacunación desplegada sobre la población. Una estrategia
para contrarestas dichos sesgos es el emparejamiento dinámico de la población.
En la siguiente figura se presenta un esquema de emparejamiento orientado a
disminuir los sesgos muestrales.

![](img/matching.png)

### **4.7 Próximos características**

* Estimador Kaplan-Meier

* Curva loglog para evaluación de riesgos proporcionales

* Matching dinámico

* Censura

## 5. Reflexión

En esta sesión se llevó a cabo una estimación básica de la efectividad vacunal
mediante un estudio de cohorte, haciendo uso de los estimador Kaplan-Meier y
del modelo de Cox. Adicionalmente, se estudió la hipótesis de riesgos
proporcionales para los grupos vacunado y no vacunado y se enfrentó el sesgo
muestral de los datos mediante la construcción de una cohorte dinámica, haciendo
uso de métodos de emparejamiento poblacional. En general la validez de los
resultados obtenidos depende del alcance que se quiera dar al estudio, debido
a que la decisión sobre aceptar o no los resultados es altamente dependiente
del tipo de diseño que se proponga para las cohortes y el acceso a información
adicional relevante que permita realizar ajustes por variables confusoras o
ajustar la censura de datos durante el seguimiento.
proporcionales para los grupos vacunado y no vacunado comparando la
construcción de tiempos al evento de forma dinámica y fija. Se observó que
pese a que la hipótesis de riesgos proporcionales se corrobora gráficamente
en la consrucción de los tiempos al evento con fecha de inicio fija, al evaluar
el modelo de riesgos proporcionales de Cox el test de Schoenfeld rechaza
esta hipótesis. En general la decisión sobre aceptar o no los resultados
es altamente dependiente del acceso a información adicional relevante que
permita realizar ajustes a la estimación y capturar dinámicas relevantes.

***

## Reto

[Reto](https://docs.google.com/document/d/1_33E0LufZP7FNO9Q491aFquV26eS4p2h/edit?usp=sharing&ouid=108718106243006326200&rtpof=true&sd=true)

Expand Down
Loading

0 comments on commit 0915e3f

Please sign in to comment.