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_vacu <- 157400
total_novacu <- 257357
# Casos con admisión hospitalaria tras presentación a emergencias (exclusion‡)
emerg_vacu <- 2361
emerg_novacu <- 3080
# Casos sin admisión hospitalaria
no_emerg_vacu <- total_vacu - emerg_vacu # 155,039
no_emerg_novacu <- total_novacu - emerg_novacu # 254,277
#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"),
"Admisión" = c("Sí", "No")))
print(tabla_2x2)
## Admisión
## Vacunación Sí No
## Vacunado 2361 155039
## No vacunado 3080 254277
#Calculo OR
OR <- (emerg_vacu * no_emerg_novacu) / (no_emerg_vacu * emerg_novacu)
OR
## [1] 1.25722
Esto significa que OR crudo es de 1.26, lo que indica que los vacunados tienen un 26% mayor de odds o posibilidades de presentarse al servicio de emergencias con admisión hospitalaria por variante Delta, en comparación con los no vacunados. Es decir, crudamente la vacunación parece aumentar la posibilidad de visitas al servicio de emergencias.
riesgo_vacu <- emerg_vacu / total_vacu
riesgo_novacu <- emerg_novacu / total_novacu
RR <- riesgo_vacu / riesgo_novacu
RR
## [1] 1.253362
Esto significa que el RR crudo es de 1.25, lo que indica que los vacunados tienen un 25% mayor riesgo de presentarse al servicio de emergencias con admisión hospitalaria por variante Delta, en comparación con los no vacunados.
DR <- riesgo_vacu - riesgo_novacu
DR* 100
## [1] 0.3032189
Esto significa que la diferencia de riesgo cruda es de 0.30 por cada 100 casos Delta, lo que indica que hay aproximadamente 0.3 casos adicionales de visitas a emergencias con admisión hospitalaria por cada 100 personas vacunadas en comparación con las no vacunadas.
EfVacunaldelta = 1 - RR
EfVacunaldelta *100
## [1] -25.3362
NO, La efectividad vacunal cruda es de -25.34%, es decir, es negativa. Según estos resultados crudos, la vacunación parece aumentar la posibilidad de visitas a emergencias con admisión hospitalaria, con un mayor riesgo de 25% (RR = 1.25), una mayor oportunidad de ocurrencia de 26% (OR = 1.26) y un incremento de 0.3 casos adicionales por cada 100 personas vacunadas (DR = 0.30).No estoy de acuerdo con este resultado porque no tiene plausibilidad biológica que la vacuna aumente el riesgo de hospitalización. Esta efectividad negativa se explica por la presencia de confusión por edad. 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 <- 453
emerg_novac_50menor <- 2416
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 <- 1908
emerg_novac_50mayor <- 664
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"),
"Admisión" = c("Sí", "No")))
cat("Tabla 2x2 - Estrato <50 años:\n")
## Tabla 2x2 - Estrato <50 años:
print(tabla_50menor)
## Admisión
## Vacunación Sí No
## Vacunado 453 84954
## No vacunado 2416 246387
#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"),
"Admisión" = c("Sí", "No")))
cat("Tabla 2x2 - Estrato ≥50 años:\n")
## Tabla 2x2 - Estrato ≥50 años:
print(tabla_50mayor)
## Admisión
## Vacunación Sí No
## Vacunado 1908 70083
## No vacunado 664 7887
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
OR_AJ
## [1] 0.4369479
(1 - OR_AJ) * 100
## [1] 56.30521
El OR ajustado por Mantel-Haenszel es de 0.44, lo que significa que ajustando por edad, los vacunados tienen un 56% menor odds de visitar el servicio de emergencias con admisión hospitalaria por variante Delta, comparado con los no vacunados. Comparado con el OR crudo de 1.26
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
RR_AJ
## [1] 0.4457846
(1 - RR_AJ) * 100
## [1] 55.42154
El RR ajustado por Mantel-Haenszel es de 0.45, lo que significa que ajustando por edad, los vacunados tienen un 55% menor riesgo de visitar el servicio de emergencias con admisión hospitalaria por variante Delta, comparado con los no vacunados. Comparado con el RR crudo de 1.25
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)
total_admision_50menor <- emerg_vac_50menor + emerg_novac_50menor
total_admision_50mayor <- emerg_vac_50mayor + emerg_novac_50mayor
peso_50menor <- total_admision_50menor / (total_admision_50menor + total_admision_50mayor)
peso_50mayor <- total_admision_50mayor / (total_admision_50menor + total_admision_50mayor)
DR_ajustada <- (peso_50menor * DR_50menor) + (peso_50mayor * DR_50mayor)
DR_ajustada * 100
## [1] -2.650173
La diferencia de riesgo ajustada por edad es de -0.94 por cada 100 casos Delta, lo que indica una disminución de aproximadamente 0.94 casos de admisión hospitalaria tras emergencias por cada 100 personas vacunadas.
VE_ajustada <- (1 - RR_AJ) * 100
VE_cruda <- (1 - RR) * 100
VE_ajustada
## [1] 55.42154
VE_cruda
## [1] -25.3362
la vacunación disminuye la posibilidad de visitas a emergencias con admisión hospitalaria, con un menor riesgo de 55% (RR = 0.45), una menor oportunidad de ocurrencia de 56% (OR = 0.44) y una disminución de 0.94 casos por cada 100 personas vacunadas. Sí estoy de acuerdo con este resultado porque al ajustar por edad se elimina la confusión que distorsionaba la estimación cruda.
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.