En esta sesión pondremos en práctica los conocimientos adquiridos sobre evaluación de efectividad de vacunas utilizando el lenguaje de programación R. Utilizaremos el diseño de cohortes para estimar la efectividad vacunal. Utilizando la librería vaccineff en R analizaremos los resultados obtenidos.
Explorar y analizar una base de datos típica para un diseño de cohorte utilizando R.
Aplicar el diseño de cohorte para estimar la efectividad de las vacunas utilizando R.
Interpretar y analizar los resultados obtenidos en los cálculos de efectividad de vacunas utilizando el diseño de cohorte.
En esta práctica se desarrollarán los siguientes conceptos:
Eficacia y Efectividad vacunal
Tiempo de inducción o “delays” en el análisis de efectividad de vacunas
Diseños observacionales para el estudio de la efectividad vacunal
Diseño de cohortes para estimación de la efectividad vacunal
Métodos estadísticos para análisis de efectividad vacunal aplicando el diseño de cohorte: Modelo de Cox, Kapplan Meir
Eficacia:
Se refiere a la capacidad de lograr un efecto deseado o esperado bajo condiciones ideales o controladas.
Es una medida teórica. En experimentos clínicos, por ejemplo, la eficacia de un medicamento se evalúa en condiciones controladas, donde todos los factores externos están cuidadosamente regulados para determinar el rendimiento puro del medicamento.
Puede considerarse como “lo que puede hacer” una intervención en las mejores circunstancias posibles.
Efectividad:
Se refiere a qué tan bien funciona una intervención en condiciones “reales” o prácticas, fuera de un entorno controlado.
Es una medida práctica. En el contexto de los medicamentos, la efectividad se refiere a qué tan bien funciona un medicamento en el “mundo real”, donde las condiciones no están tan controladas y hay muchos factores variables.
Puede considerarse como “lo que realmente hace” una intervención en circunstancias típicas o cotidianas.
Un ejemplo podría ser un medicamento que en experimentos clínicos (en condiciones ideales) mostró una eficacia del 95% en prevenir el desenlace. Sin embargo, cuando se usó en el contexto general, considerando factores como la adherencia al tratamiento, interacciones con otros medicamentos y variabilidad en la población, su efectividad fue del 85%. Aquí, la eficacia muestra el potencial del medicamento bajo condiciones ideales, mientras que la efectividad muestra cómo funciona en situaciones cotidianas. |
En el caso de las vacunas la efectividad hace referencia a la disminución proporcional de casos de una enfermedad o evento en una población vacunada comparada con una población no vacunada, en condiciones del mundo real.
El tiempo de inducción o “delay” se refiere al periodo necesario para que la vacuna administrada induzca una respuesta inmune protectora frente a la infección o la enfermedad provocada por un patógeno. Si ocurre una infección entre el momento de la vacunación y el momento donde se prevé exista una respuesta inmune protectora, ocurrirá la infección de manera natural y no se considera un fallo de la vacuna en cuestión, puesto que la persona inmunizada aún no contaba con la protección conferida por la vacuna.
Por múltiples razones, los estudios observacionales son los más utilizados en la estimación de la efectividad vacunal. Existen múltiples diseños, entre ellos: diseño de cohortes, diseño de casos y controles, diseño de test-negativo, diseño “screening-method”. La elección del diseño, dependerá de la disponibilidad de información y los recursos disponibles para llevar a cabo el estudio.
El término cohorte se refiere a un grupo de personas que comparten una característica común. En los estudios con diseño de cohorte, existen dos o más poblaciones que difieren en una característica o exposición y se realiza un seguimiento a ambos grupos para evaluar la aparición de uno o más desenlaces de interés y comparar la incidencia de los eventos entre ambos grupos. Para el caso de los estudios de la efectividad de vacunas, la exposición de interés corresponde a la aplicación de la vacuna y los desenlaces pueden incluir:
Infección: contagio con el patógeno de interés tras una exposición a alguien infeccioso
Enfermedad: desarrollo de signos y síntomas relacionados con la infección con un patógeno. Puede tener diferentes grados de severidad, requerir ingreso a hospitalización, UCI o incluso conducir a la muerte.
A la hora de llevar a cabo estos estudios se debe garantizar que las personas incluidas en cada población no tengan el desenlace de interés que será evaluado durante el seguimiento. Así mismo, es importante que el seguimiento se lleve a cabo de manera igual de rigurosa y por el mismo tiempo en ambos grupos.
La efectividad vacunal corresponde a la reducción relativa del riesgo de desarrollar la infección y/o enfermedad. En los estudios de cohorte se puede estimar el riesgo relativo, los odds ratio o los hazard ratio que expresa el riesgo que tiene la cohorte no expuesta comparado con la cohorte de los expuestos. La efectividad vacunal será, por lo tanto, el complemento del riesgo proporcional en la cohorte de expuestos.
Veamos esto con un ejemplo: para evaluar la efectividad de una vacuna para prevenir el desarrollo de enfermedad en una población, al cabo del seguimiento la incidencia en la cohorte vacunada fue de 1 por 1000 habitantes y en la cohorte no vacunada fue de 5 por 1000 habitantes. En este caso, tenemos que el riesgo relativo en la población vacunada fue 0.001/0.005 = 0,2. Es decir, la población vacunada tuvo una incidencia correspondiente al 20% de la incidencia de la población no vacunada. Esta reducción se puede atribuir a la vacuna y para estimarla usaríamos el complemento, que corresponde a 1 - 0,2= 0,8. Es decir que la reducción que se observó corresponde a un 80% y se puede atribuir a la vacuna, por lo tanto, la efectividad de la vacunación fue del 80% para evitar la enfermedad.
3.5. Métodos estadísticos para análisis de efectividad vacunal
Crucialmente, en el diseño de cohortes se usan dos métodos: Modelo de Cox, y Método de Kapplan Meir
En el modelo Cox, utilizamos la métrica hazard ratio. Esta es una medida del riesgo de un evento en el tiempo, en los estudios de cohorte las personas en cada cohorte deben estar en riesgo de presentar el desenlace de interés y la diferencia en el riesgo del evento al final del periodo de seguimiento será comparado entre ambos grupos. El hazard ratio se refiere a esta diferencia en los riesgos de cada población de desarrollar un desenlace de interés en el tiempo del estudio.
En los análisis de Kaplan-Meier se utilizan las tasas de incidencia de un evento que refleja el riesgo de cada población de presentar el desenlace de interés durante el tiempo de seguimiento. La comparación entre ambos grupos genera la razón de riesgos y es la medida que se puede utilizar en los estudios para estimar la efectividad vacunal.
Para llevar a cabo los análisis del taller es necesario instalar el paquete vaccineff para esto ejecute las siguientes líneas en R:
if(!require("pak")) install.packages("pak")
pak::pak("epiverse-trace/vaccineff@dev")
Posterior a la instalación, deben cargarse las librerías que vamos a usar
library(vaccineff)
library(ggplot2)
Para este ejercicio utilizaremos uno de los conjuntos de datos integrados en el paquete vaccineff, instalado previamente. Se trata de una población hipotética, compuesta por 100.000 habitantes, que recibió dos dosis de una vacuna para disminuir el riesgo de muerte por una enfermedad respiratoria viral. Sobre esta población se realizó seguimiento por 1 año, entre el 1 de enero y 31 de diciembre de 2044. En el conjunto de datos se presenta la información desagregada para cada uno de los participantes.
Es necesario tener presente que la vacuna aplicada a esta población hipotética demostró en los estudios de eficacia que brindaba protección ante infección (desarrollo de anticuerpos neutralizantes protectores) 14 días posteriores a la aplicación de la vacuna. Este periodo de tiempo estará incluido como “delay” en el análisis, y quiere decir que las personas que presenten el desenlace de interés antes de esos 14 días posteriores a la aplicación de la vacuna no serán contabilizadas entre las vacunadas.
Veamos esto con un ejemplo: una persona que recibe la primera dosis de la vacuna el 23 de febrero de 2044 y fallece a causa de infección con el patógeno el 28 de febrero de 2044 no será contabilizada como inmunizada, debido a que no había transcurrido el tiempo necesario para el desarrollo respuesta inmune protectora (Figura 1).
Vaccineff cuenta con un conjunto de funciones que facilitan el análisis exploratorio, la agrupación de datos de forma categórica y la construcción de las variables necesarias para la estimación de la efectividad vacunal.
En esta sección describiremos las características generales del conjunto de datos que se utilizará para estimar la efectividad vacunal con el diseño de cohorte. Pero primero es necesario cargar el conjunto datos, para esto debe ejecutar el siguiente comando en R.
data("cohortdata")
En el ambiente de RStudio aparecerá el objeto “cohortdata” que cuenta con 100.000 observaciones y 8 variables.
Para explorar las características generales de las variables, ingrese el siguiente comando en R:
str(cohortdata)
## Classes 'data.table' and 'data.frame': 100000 obs. of 8 variables:
## $ sex : chr "F" "M" "F" "M" ...
## $ age : int 6 79 34 26 66 10 46 21 60 39 ...
## $ subsidy : num 0 0 0 0 0 1 0 0 0 0 ...
## $ death_date : IDate, format: NA NA ...
## $ vaccine_date_1: IDate, format: NA "2044-03-31" ...
## $ vaccine_date_2: IDate, format: NA "2044-05-07" ...
## $ vaccine_1 : chr NA "BRAND2" "BRAND2" NA ...
## $ vaccine_2 : chr NA "BRAND2" "BRAND2" NA ...
## - attr(*, ".internal.selfref")=<externalptr>
Como puede observarse, la primera línea describe la clase del objeto cohortdata. En particular, vemos que es de tipo ‘data.table’ y ‘data.frame’, lo que implica que a este son aplicables las funciones compatibles con ambas clases de objetos. En las siguientes líneas se describen las variables contenidas en el conjunto de datos. Tres de estas son tipo cadena de caracteres (‘chr’), tres tipo fecha (‘IDate’), una tipo entero (‘int’) y una tipo numérica (‘num’). Para todas las columnas se presenta también en la salida el contendio de las primeras filas del conjunto de datos.
Complete la siguiente tabla con la información de las variables del conjunto de datos
Variable | Código | Tipo | Valores |
Sexo | $sex | nominal | F, M |
Edad | $age | 0 a 100 | |
Fecha de defunción | IDate | ||
Fecha vacuna 1 | NA, “yyyy-mm-dd” | ||
Fecha vacuna 2 | $va ccine_date_2 | ||
Marca vacuna 1 | $vaccine_1 | ||
nominal | NA, “BRAND1”, “BRAND2” |
Para agrupar la población por grupo etario y graficar la distribución por edad utilizaremos la función “get_age_group”. Para esto, ejectute el siguiente comando en R:
cohortdata$age_group <- get_age_group(
data = cohortdata,
col_age = "age",
max_val = 80,
min_val = 0,
step = 9)
Esta función permite agrupar la población en intervalos etarios a partir de la variable “age” del conjunto de datos. En particular, para construir la agrupación por decenios se asigna el ancho del intervalo con step = 9, el mínimo valor de edad en 0 con “min_val” y el máximo valor en 80 con “max_val”. Esto significa que cualquier registro con edad mayor o igual a 80 años se agrupará en “>80”
Puede graficar de forma rápida la distribución etaria asociada a la variable “age_group” utilizando la función “geom_bar” de la librería ggplot2. Para esto, ejecute el siguiente comando en R:
ggplot(data = cohortdata,
aes(x = age_group)) +
geom_bar() +
theme_classic()
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 ofrece la función “plot_coverage” que permite llevar a cabo esta tarea con facilidad. Para esto, ejecute el siguiente comando en R:
plot_coverage(
data = cohortdata,
vacc_date_col = "vaccine_date_1",
unit = "month",
doses_count_color = "steelblue",
coverage_color = "mediumpurple",
date_interval = NULL,
cumulative = FALSE)
Esta función evalúa la cobertura con base en alguna dosis, la cual se especifica en el parámetro “vacc_date_col”. En particular, en el ejemplo anterior se utiliza la primera dosis del conjunto de datos de ejemplo (“vaccine_date_1”). Además, es posible agrupar el conteo de dosis y el cálculo de cobertura en días, meses y años utilizando el parámetro “unit” y personalizar los colores de la gráfica con los parámetros “doses_count_color” y “coverage_color”. El parámetro “date_interval” se utiliza para personalizar el intervalo de datos que se quiere observar, en caso de usar “FALSE” la función toma las fechas mínima y máxima de la tabla. Finalmente, el parámetro “cumulative” permite graficar el conteo de dosis de forma acumulada en el tiempo.
Ahora prueba la función cambiando vaccine_date_1 por vaccine_date_2 y la unidad de tiempo por días.
plot_coverage(
data = cohortdata,
vacc_date_col = "vaccine_date_2",
unit = "day",
doses_count_color = "steelblue",
coverage_color = "mediumpurple",
date_interval = NULL,
cumulative = FALSE)
Como mencionamos previamente, en los estudios con diseño de cohorte es necesario llevar a cabo un seguimiento de la cohorte vacunada y la cohorte no vacunada con igual intensidad hasta que termine el tiempo de seguimiento o hasta que se presente el desenlace de interés.
En este taller, la pregunta que se requiere responder para el caso de estudio es: ¿Cuál es la efectividad de la vacuna para evitar la muerte debido a la infección ocasionada por el virus respiratorio de interés?.
Por lo tanto, el desenlace de interés será el fallecimiento debido a la infección por el virus. El seguimiento de las cohortes empieza el 1 de enero de 2044 y el periodo de seguimiento fue de un año.
Como el seguimiento de las cohortes inicia el 1 de enero de 2044 vamos a definir la fecha del inicio del seguimiento (tiempo 0), para esto ejecute el siguiente comando en R:
start_cohort <- as.Date("2044-01-01")
Luego, definamos la fecha del final del seguimiento que corresponde a la fecha donde se detiene el seguimiento de la cohorte, para esto ejecute el siguiente comando en R:
end_cohort <- as.Date("2044-12-31")
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:
cohortdata$immunization <-
get_immunization_date(
data = cohortdata,
outcome_date_col = "death_date",
outcome_delay = 0,
immunization_delay = 14,
vacc_date_col = c("vaccine_date_1", "vaccine_date_2"),
end_cohort = end_cohort,
take_first = FALSE)
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.
A continuación, cree una columna nueva donde categorice cada uno de los sujetos según su estado vacunal, vacunados como “v” y no vacunados como “u” (unvaccinated, en inglés). Para esto ejecute el siguiente comando en R:
cohortdata$vaccine_status <- set_status(
data = cohortdata,
col_names = "immunization",
status = c("vacc", "unvacc"))
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 desenlace para este ejercicio va a ser la condición vital al final del estudio. En otros ejercicios el desenlace de interés podría ser la hospitalización o la infección, dependiendo del conjunto de datos utilizado.
Tenga en cuenta que en conjunto de datos del caso de estudio todas las defunciones son debidas a la infección por el virus de interés. Para definir el desenlace de interés de acuerdo a la condición vital de los participantes en la cohorte, ejecute el siguiente comando en R:
cohortdata$death_status <- set_status(
data = cohortdata,
col_names = "death_date")
Al ejecutar este comando, nuevamente aparecerá una nueva columna en el conjunto de datos con el que se está realizando el caso de estudio. Al explorar la base de datos completa, se verifica que en la nueva columna aparece 0 = vivo y 1 = fallecido.
Ahora, calcule para cada una de las personas el tiempo que fue seguido en el estudio. Recuerde que el seguimiento se hace igual para ambas cohortes (vacunada y no vacunada) y finaliza cuando termina el estudio o cuando se presenta el desenlace de interés. Para obtener este dato ejecute el siguiente comando en R:
cohortdata$time_to_death <- get_time_to_event(
data = cohortdata,
outcome_date_col = "death_date",
start_cohort = start_cohort,
end_cohort = end_cohort,
start_from_immunization = FALSE)
Nuevamente, al ejecutar este comando se creará una nueva variable en el conjunto de datos y como se puede evidenciar al explorar los datos completos, la nueva variable estima los días de seguimiento para cada una de las personas. Esta función permite crear tiempos al evento desde el inicio del seguimiento en el caso de estudio, en este caso se utiliza 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”
Como aproximación cualitativa a la efectividad vacunal, graficaremos la curva de riesgos acumulados (1 menos la supervivencia de las poblaciones). Esta nos permite entender de forma cualitativa cuál de las poblaciones acumula mayor riesgo durante el estudio de cohorte. Y por tanto, evaluar hipótesis sobre el potencial efecto de la vacunación sobre la cohorte. Para graficar el riesgo acumulado ejecute el siguiente comando en R:
plot_survival(data = cohortdata,
outcome_status_col = "death_status",
time_to_event_col = "time_to_death",
vacc_status_col = "vaccine_status",
vaccinated_status = "vacc",
unvaccinated_status = "unvacc",
vaccinated_color = "steelblue",
unvaccinated_color = "darkred",
start_cohort = start_cohort,
end_cohort = end_cohort,
percentage = TRUE,
cumulative = TRUE)
A partir de la función anterior también es posible realizar la gráfica de supervivencia de las cohortes o gráfica de Kaplan-Meier en la cual se parte del 100% de ambas cohortes en el eje de las ordenadas y en el eje de las abscisas se representa el tiempo y se observa la disminución que hay debido a las defunciones en cada cohorte. Tenga en cuenta que este no es el estimador de Kaplan-Meir, es sólo la gráfica sobre las curvas de supervivencia y de riesgo acumulado. Para obtener este gráfico, se ejecuta la misma función y se cambia el argumento “percentage” por FALSE:
plot_survival(data = cohortdata,
outcome_status_col = "death_status",
time_to_event_col = "time_to_death",
vacc_status_col = "vaccine_status",
vaccinated_status = "vacc",
unvaccinated_status = "unvacc",
vaccinated_color = "steelblue",
unvaccinated_color = "darkred",
start_cohort = start_cohort,
end_cohort = end_cohort,
percentage = TRUE,
cumulative = FALSE)
En todos los estudios observacionales de efectividad vacunal de cohorte se compara el riesgo (o tasa de incidencia) entre los vacunados y no vacunados de desarrollar el desenlace de interés (infección, enfermedad, muerte, etc). La medida de riesgo a utilizar dependerá de las características de la cohorte y puede expresarse en términos de relative risk (RR) o hazard ratio (HR).
En este ejercicio utilizaremos el modelo de regresión de riesgos proporcionales de Cox para estimar el hazar ratio y con esta medida estimar la efectividad mediante
VE= 1-HR
Para estimar la efectividad vacunal en términos de HR, ejecute el siguiente comando en R:
coh_eff_noconf(
data = cohortdata,
outcome_status_col = "death_status",
time_to_event_col = "time_to_death",
status_vacc_col = "vaccine_status")
## HR HR_low HR_high V_eff V_eff_low V_eff_high PH p_value
## 1 0.6445 0.5488 0.7568 0.3555 0.2432 0.4512 reject 2.047998e-15
El término HR
hace referencia a la estimador puntual del
hazard ratio de la población vacunada (expuesta) comparada con la
población no expuesta (no vacunada). HR_low
y
HR_high
hacen referencia a los límites inferior y superior,
respectivamente, del intervalo de confianza del 95% para ese estimador
puntual. Por lo tanto, el hazard ratio de la población vacunada para
presentar muerte por infección debida al virus es 0.6445 con un
intervalo de confianza del 95% entre 0.5488 y 0.7568.
Por su parte V_eff
se refiere al estimador puntual de la
efectividad vacunal derivada de la fórmula (VE=1-HR)
.
Veff_low
y Veff_high
hacen referencia a los
límites inferior y superior, respectivamente, del intervalo de confianza
del 95% para ese estimador puntual. Por lo tanto, la efectividad de la
vacuna para prevenir muerte por infección debida al virus es 0.3555 con
un intervalo de confianza del 95% entre 0.2432 y 0.4512.
Sin embargo, al final de la salida se evidencia que el término
PH
que se refiere a la prueba de hipótesis de igualdad de
los riesgos proporcionales. En esta prueba de hipótesis, la hipótesis
nula es que los riesgos son proporcionales entre dos sujetos a lo largo
del tiempo. La hipótesis alterna es que los riesgos no son
proporcionales a lo largo del tiempo. Como se evidencia, la hipótesis
nula es rechazada, es decir en la población de nuestro caso de estudio
los riesgos no son proporcionales.
¿Por qué considera que pasó esto?
¿Se cumplieron los supuestos para el modelo de Cox?
Al no cumplirse este supuesto, la interpretación anterior no tendría validez y la interpretación de los resultados estaría modificada por la interacción que puede haber entre la exposición (vacuna) y el efecto del tiempo.
¿Qué solución podría plantear?
Pruebe verificar si la hipótesis de riesgos proporcionales se cumple para ciertos grupos de edad.
Pobremos con la estratificación de uno de los grupos de edad, elegiremos la población entre 30 y 39 años que es el grupo etario más grande dentro del conjunto de datos del caso de estudio.
Ejecutemos el siguiente comando para delimitar nuestros datos a la población del grupo etario de interés.
cohortdata_3039 <- cohortdata[cohortdata$age_group == "30-39", ]
coh_eff_noconf(
data = cohortdata_3039,
outcome_status_col = "death_status",
time_to_event_col = "time_to_death",
status_vacc_col = "vaccine_status"
)
## HR HR_low HR_high V_eff V_eff_low V_eff_high PH p_value
## 1 0.1885 0.0442 0.8038 0.8115 0.1962 0.9558 accept 0.4293315
Realice la interpretación del HR y la V_eff con sus intervalos de confianza y la prueba de hipótesis de riesgos proporcionales.
En el pipeline del desarrollo de Vaccineff se encuentran algunas funciones en implementación, que permitirán ampliar los análisis que se pueden realizar con los datos de los estudios con diseño de cohorte, así como la utilización de análisis de otros diseños de estimación de efectividad vacunal. Entre las funciones que se espera tener implementadas en el corto plazo se encuentran:
Emparejamiento: el emparejamiento de entre los sujetos vacunados y no vacunados, permite controlar el sesgo residual debido a diferencias en las características sociodemográficas de los sujetos en cada grupo. Al emparejar se asigna a cada vacunado una “pareja” o “sujeto” no vacunado con características sociodemográficas similares, de manera que cada cohorte queda compuesta por sujetos similares que solo se diferencian en la exposición a la vacuna.
Censura: en el conjunto de datos utilizado en el caso de estudio se estipuló que todas las muertes registradas se debían a la infección por el virus de interés, sin embargo, en otros conjuntos de datos puede ocurrir que la muerte por otras causes constituya un riesgo competitivo y será necesario tener en cuenta que estas muertes no deben aportar al riesgo en ninguna de las dos cohortes.
Otros estimadores de riesgo en estudios con diseño de cohorte:
como se mencionó previamente, entre las medidas de riesgo más utilizadas
en los estudios de cohorte se encuentran las tasas de incidencia y la
comparación entre ambas tasas contituye una medida del riesgo relativo,
al utilizar esta medida la efectividad vacunal se estimará con la
fórmula (VE=1-RR)
.
Este documento puede ser usado para propósitos no comerciales y de enseñanza.