This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
##SetWD
setwd("~/MAESTRIA EPIDEMIOLOGIA ICESI/recoleccion_d/taller_s4")
knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
set.seed(704) # Make all random draws reproducible
packages <- c("tidyverse", "survival", "here", "arm","tibble", "broom", "tidyverse", "dagitty", "ggdag",
"knitr", "patchwork", "ggridges", "gmodels", "xaringanthemer", "latex2exp", "stdReg",
"epiR", "stats", "epitools")
invisible(lapply(packages, function(xxx) suppressMessages(require(xxx, character.only = TRUE, quietly=TRUE, warn.conflicts = FALSE))))
## Warning: package 'tidyverse' was built under R version 4.5.3
## Warning: package 'ggplot2' was built under R version 4.5.3
## Warning: package 'tibble' was built under R version 4.5.2
## Warning: package 'tidyr' was built under R version 4.5.3
## Warning: package 'readr' was built under R version 4.5.2
## Warning: package 'purrr' was built under R version 4.5.2
## Warning: package 'dplyr' was built under R version 4.5.3
## Warning: package 'stringr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.2
## Warning: package 'lubridate' was built under R version 4.5.2
## Warning: package 'survival' was built under R version 4.5.3
## Warning: package 'broom' was built under R version 4.5.2
## Warning: package 'dagitty' was built under R version 4.5.3
## Warning: package 'knitr' was built under R version 4.5.2
## Warning: package 'patchwork' was built under R version 4.5.2
## Warning: package 'epiR' was built under R version 4.5.2
##LLAMAR PAQUETES
library(readxl)
library(dplyr)
library(ggplot2)
library(moments)
library(tidyverse)
library(survival)
library(tibble)
library(broom)
library(dagitty)
library(patchwork)
library(epiR)
library(epitools)
library(stats)
library(psych)
library(e1071)
library(moments)
library(nortest)
library (dagitty)
La medida de frecuencia utilizada es la tasa de incidencia de Covid-19 por cada 100.000 habitantes, en el periodo de observación de 4 semanas, en el periodo de tiempo correspondiente de la semana 37 a la 40 del año 2021. El gráfico de barras representa, el rango de edad por la incidencia estratificado por aquellos participantes con vacunados con almenos 2 dosis en comparación a no vacunados.
En el gráfico de barras se observa que la población menor de 30 años presenta una tasa de incidencia de Covid-19 más alta en aquellos pacientes no vacunados, mientras que en aquellos mayores o iguales a 30 años la tasa de incidencia es mayor en vacunados con un máximo de 1500 habitantes por 100.000 en el grupo de 40 a 49 años. Esto corresponde con la figura 1 y 2 del porcentaje acumualado de pacientes con dosis 1 y 2, en el que se observa que la proporción de vacunados es mayor en edades más avanzadas que en edades jóvenes. De igual forma, corresponde a como se establecieron las políticas públicas de prioridad de vacuncación en la población a nivel mundial.
# Total de casos Delta por vacunación
total_vacu <- 157400 # Vacunados 14 días post dosis 2
total_novacu <- 257357 # No vacunados
# Casos con visita a emergencias
emerg_vacu <- 6265 # Vacunados con visita a emergencias
emerg_novacu <- 11678 # No vacunados con visita a emergencia
# Casos No visita a emergencias
no_emerg_vacu <- total_vacu - emerg_vacu # 151,135
no_emerg_novacu <- total_novacu - emerg_novacu # 245,679
#Tabla 2x2
#Tabla 2x2
tabla_2x2 <- matrix(c(emerg_vacu, no_emerg_vacu,
emerg_novacu, no_emerg_novacu),
nrow = 2, byrow = TRUE,
dimnames = list("Vacunación" = c("Vacunado", "No vacunado"),
"Emergencia" = c("Sí", "No")))
print(tabla_2x2)
## Emergencia
## Vacunación Sí No
## Vacunado 6265 151135
## No vacunado 11678 245679
#Calculo OR
OR <- (emerg_vacu * no_emerg_novacu) / (no_emerg_vacu * emerg_novacu)
(1 - OR) * 100
## [1] 12.79215
Esto significa que los pacientes vacunados presentan (12.8) casi 13 veces menor posibilidad de assitir a urgencias por la variante delta.
riesgo_vacu <- emerg_vacu / total_vacu
riesgo_novacu <- emerg_novacu / total_novacu
RR <- riesgo_vacu / riesgo_novacu
(1 - RR) * 100
## [1] 12.28298
Esto significa que los pacientes vacunados presentan (12.3) aproximadamente 12% menor riesgo de asitir a urgencias por la variante delta.
DR <- riesgo_vacu - riesgo_novacu
DR* 100
## [1] -0.5573606
Esto significa que los vacunados tuvieron un riesgo menor absoluto de 0.56 de visitas a emergencias comparado a los vacunados por cada 100 casos de variante delta.
EfVacunaldelta = 1 - RR
EfVacunaldelta *100
## [1] 12.28298
La efectividad cruda sin ajustar por ninguna variable es muy baja. En este caso teniendo en cuenta el contexto de políticas públicas en las que se priorizó a la población mayor, sería razonable ajustar por edad, ya que como vimos en la Figura 1 y 2 las tasas de incidencia mayor por 100.000 habitantes fue en jóvenes no vacunados. En este caso al calcular la efectividad cruda se subestima el efecto real de la vacuna.
Ahora teniendo en cuenta la edad de los participantes ilustradas en la tabla a continuacion, por favor estime las medidas de asociacion ajustadas por la edad.
#menor50
total_vac_50menor <- 85407
total_novac_50menor <- 248803
emerg_vac_50menor <- 2518
emerg_novac_50menor <- 10479
no_emerg_vac_50menor <- total_vac_50menor - emerg_vac_50menor
no_emerg_novac_50menor <- total_novac_50menor - emerg_novac_50menor
#mayor50
total_vac_50mayor <- 71991
total_novac_50mayor <- 8551
emerg_vac_50mayor <- 3747
emerg_novac_50mayor <- 1199
no_emerg_vac_50mayor <- total_vac_50mayor - emerg_vac_50mayor
no_emerg_novac_50mayor <- total_novac_50mayor - emerg_novac_50mayor
#Tabla 2x2
#Menores50
tabla_50menor <- matrix(c(emerg_vac_50menor, no_emerg_vac_50menor,
emerg_novac_50menor, no_emerg_novac_50menor),
nrow = 2, byrow = TRUE,
dimnames = list("Vacunación" = c("Vacunado", "No vacunado"),
"Emergencia" = c("Sí", "No")))
cat("Tabla 2x2 - Estrato <50 años:\n")
## Tabla 2x2 - Estrato <50 años:
print(tabla_50menor)
## Emergencia
## Vacunación Sí No
## Vacunado 2518 82889
## No vacunado 10479 238324
#Mayores50
tabla_50mayor <- matrix(c(emerg_vac_50mayor, no_emerg_vac_50mayor,
emerg_novac_50mayor, no_emerg_novac_50mayor),
nrow = 2, byrow = TRUE,
dimnames = list("Vacunación" = c("Vacunado", "No vacunado"),
"Emergencia" = c("Sí", "No")))
cat("Tabla 2x2 - Estrato ≥50 años:\n")
## Tabla 2x2 - Estrato ≥50 años:
print(tabla_50mayor)
## Emergencia
## Vacunación Sí No
## Vacunado 3747 68244
## No vacunado 1199 7352
T_50menor <- total_vac_50menor + total_novac_50menor
T_50mayor <- total_vac_50mayor + total_novac_50mayor
numerador_OR_MH <- (emerg_vac_50menor * no_emerg_novac_50menor) / T_50menor +
(emerg_vac_50mayor * no_emerg_novac_50mayor) / T_50mayor
denominador_OR_MH <- (no_emerg_vac_50menor * emerg_novac_50menor) / T_50menor +
(no_emerg_vac_50mayor * emerg_novac_50mayor) / T_50mayor
OR_AJ <- numerador_OR_MH / denominador_OR_MH
(1 - OR_AJ) * 100
## [1] 40.86623
Esto significa que ajustado por Mantel-Haenszel por edad, los vacunados con 2 dosis tienen 40 veces menos posibilidades de visitar el servicio de urgencias comparado con aquellos sin vacunas. Comparado con el OR crudo del punto anterior, observamos que el efecto protector tiene menor veces de posibilidades que los no vacunados.
numerador_RR_AJ <- (emerg_vac_50menor * total_novac_50menor) / T_50menor +
(emerg_vac_50mayor * total_novac_50mayor) / T_50mayor
denominador_RR_AJ <- (emerg_novac_50menor * total_vac_50menor) / T_50menor +
(emerg_novac_50mayor * total_vac_50mayor) / T_50mayor
RR_AJ <- numerador_RR_AJ / denominador_RR_AJ
(1 - RR_AJ) * 100
## [1] 39.39782
Esto significa que los vacunados con dos dosis tienen un 39.41% menor riesgo de visitar el servicio de emergencias por variante Delta en comparación con los no vacunados.
DR_50menor <- (emerg_vac_50menor / total_vac_50menor) - (emerg_novac_50menor / total_novac_50menor)
DR_50mayor <- (emerg_vac_50mayor / total_vac_50mayor) - (emerg_novac_50mayor / total_novac_50mayor)
peso_50menor <- T_50menor / (T_50menor + T_50mayor)
peso_50mayor <- T_50mayor / (T_50menor + T_50mayor)
DR_ajustada <- (peso_50menor * DR_50menor) + (peso_50mayor * DR_50mayor)
DR_ajustada * 100
## [1] -2.730349
Por cada 100 casos de la variante Delta, hay aproximadamente 2.73 menos visitas a emergencias entre los vacunados que entre los no vacunados, después de ajustar por edad.
VE_ajustada <- (1 - RR_AJ) * 100
VE_cruda <- (1 - 0.8775) * 100
Esta efectividad de la vacuna ajustada por la edad, es del 39.41%, Comparado con la efectividad sin ajuste que fue del 12.25% se observa que la edad si actúa como factor de confusión. Y la protección es mayor en comparación al valor obtenido sin ajustar.
dag <- dagitty('dag {
Edad [pos="1,0"]
Vacunacion [exposure, pos="0,1"]
Emergencia [outcome, pos="2,1"]
Edad -> Vacunacion
Edad -> Emergencia
Vacunacion -> Emergencia
}')
plot(dag)
title(main = "DAG: Vacunación covid")
La tabla nos presenta las tasas de ataque secundarios según cada variante y cada contexto (infección por contacto en viajes, intradomiciliario, contactos no domiciliarios). Estos datos fueron obtenidos de diferentes fuentes secundarias por lo cual no son del todo confiables. Por lo tanto, presentan varias dificultades que limitan la robustez.
Por ejemplo hay variantes y categorías en los que el conteo fue menor a 50 o casos menor a 20 por lo tanto no se tomaron y se determinaron como datos “no disponibles” lo que limita las comparaciones. De igual forma, el reporte aclara que estos datos deben tomarse como el límite inferior, que seguramente la tasas reales son mapas altas pero el sistema no logra captar a todos los infectados. Adicionalmente, se excluyeron resultados genómicos de baja calidad.
Sin embargo, en general la tabla presenta que la tasa de transmisión intradomiciliaria es más alta que la de viajes en todas las variantes, así como que la variante Delta es la que tiene mayor número de infectados pero que al convertirse en proporción según la variante, puede subestimarse su efecto total sobre el etotal de infectados por todas las variantes, ya que al ser la variante dominante su denominador es mucho más grande.
Los posibles sesgos que pueden existir son los de información por clasificación equivocada de casos de viaje y no viaje, y por no detectar contactos infectados que no se hicieron prueba. El mismo reporte reconoce que algunos casos vinculados a viajes pueden no ser identificados correctamente por los métodos que usan y terminar clasificados como no vinculados a viaje o como desconocidos. De igual forma, puede haber clasificación errónea de la variante, ya que se incluyen resultados probables por genotipificación que no son 100% seguros.
En cuanto al sesgo de selección, este se desarrolla en el contexto que solo estpan en el análisis las personas captadas por NHS test and Trace. De igual forma, los sintomáticos se hacen prueba más que los asintomáticos por lo tanto se incluirían solo personas sintomáticas.
También podría existir sesgo de confusión, porque no se ajusta por variables como la edad, comorbilidades, habitantes en casa, o estatus socioeconómico, lo que podría influir en la probabilidad de infectarse.
El sesgo de información hará que los valores tiendan hacia el valor nulo. Esto pasa debido a que hay contactos que sguramente se infectaron pero que nunca se hicieron pruebas. Esto tiene como consecuencia que el numerador de tasa de ataque sea menor que el real. En este sentido, estas tasas presentadas subestiman el efecto total.
Sin embargo, si el sesgo es diferencial, si los contactos de viajeros son rastreados con más intensidad que los contactos comunitarios, entonces la tasa de ataque en viajeros podría estar mejor estimada que la de los otros grupos. En ese caso el sesgo podría ir en cualquier dirección, ya sea hacia el nulo o lejos del nulo.
En primer lugar, se debería prevenir el sesgo de información con instrumentos validados, el cegamiento de los evaluadores y con protocolos estrictos de recolección. Cuando ya hay sesgo de información en los estudios, se puede realizar: Análisis cuantitativo de sesgos: se prueban diferentes escenarios de error para ver como cambian los resultados. Calibración por regresión: se reemplaza la variable medida con error por su valor esperado condicional. Validación con el gold standard: Se compara la clasificación del sistema de viogilancia con un método precisio usando una submuestra para corregir las estimaciones del grupo completo. Método bayesiano: Se incorpora incertidumbre sobre el error de medición directamente sobre el análisis.
Sí, yo considero que sí hay posibilidad de sesgo de selección en estos datos. El principal mecanismo es que solo entran al análisis las personas que fueron detectadas por el sistema NHS Test and Trace. De igual forma se incluyen únicamente los sintomáticos que se hicieron prueba, y se excluyen los asintomáticos o aquellas personas que no tuvieron acceso a la prueba por diferentes razones.Por lo tanto, no representa a todos los infectados. Otro mecanismo es que el rastreo de contactos probablemente fue más intenso para los casos vinculados a viajes internacionales. Esto genera una detección desigual entre grupos. De igual forma, el hecho de que se excluyen variantes con menos de 50 contactos o 20 casos, elimina sistemáticamente las variantes menos frecuentes del análisis e impide evaluar su transmisibilidad real. En cuanto a la dirección del sesgo, probablemente va hacia el valor nulo en general, porque al no captar todos los casos secundarios estamos subestimando las tasas de ataque en todos los grupos.