Medidas de Asociación en Epidemiología

Tabla 2x2 y Notación

Funciones básicas para analizar y obtener los calculos de medidas de asociación

# Función para cálculos básicos en 2x2 (riesgos observables)
calc_2x2_measures <- function(a, b, c, d, conf.level = 0.95) {
  Re <- a / (a + b)
  Ru <- c / (c + d)
  RR <- Re / Ru
  RD <- Re - Ru
  OR <- (a * d) / (b * c)
  z  <- qnorm((1 + conf.level)/2)
  se_logOR <- sqrt(1/a + 1/b + 1/c + 1/d)
  CI_OR <- exp(log(OR) + c(-1, 1) * z * se_logOR)
  se_logRR <- sqrt(1/a - 1/(a + b) + 1/c - 1/(c + d))
  CI_RR <- exp(log(RR) + c(-1, 1) * z * se_logRR)
  se_RD <- sqrt( (Re * (1 - Re))/(a + b) + (Ru * (1 - Ru))/(c + d) )
  CI_RD <- RD + c(-1, 1) * z * se_RD
  list(
    a = a, b = b, c = c, d = d,
    Riesgo_expuestos = Re,
    Riesgo_no_expuestos = Ru,
    RR = RR, IC95_RR = CI_RR,
    RD = RD, IC95_RD = CI_RD,
    OR = OR, IC95_OR = CI_OR
  )
}

# Función para métricas de ensayo vacunal
calc_vaccine_metrics <- function(casos_vac, n_vac, casos_ctrl, n_ctrl, conf.level = 0.95){
  Re <- casos_vac / n_vac
  Ru <- casos_ctrl / n_ctrl
  RR <- Re / Ru
  VE <- 1 - RR
  RD <- Re - Ru
  NNV <- 1 / abs(RD)
  z <- qnorm((1 + conf.level)/2)
  se_logRR <- sqrt(1/casos_vac - 1/n_vac + 1/casos_ctrl - 1/n_ctrl)
  CI_RR <- exp(log(RR) + c(-1, 1) * z * se_logRR)
  se_RD <- sqrt( (Re*(1 - Re))/n_vac + (Ru*(1 - Ru))/n_ctrl )
  CI_RD <- RD + c(-1, 1) * z * se_RD
  list(
    Riesgo_vac = Re, Riesgo_ctrl = Ru,
    RR = RR, IC95_RR = CI_RR,
    VE = VE,
    RD = RD, IC95_RD = CI_RD,
    NNV = NNV
  )
}

Cinturones de seguridad y lesión fatal (casos y controles; conductores en choques) Contexto: Casos = muertes; Controles = choques no fatales. Tabla 2×2 (epidemiología de lesiones): Muertes: Con cinturón = 110, Sin cinturón = 390 No fatales: Con cinturón = 1,900, Sin cinturón = 1,600

Nombrar las clasificaciones

a <- 110; b <- 390; c <- 1900; d <- 1600
res_cintu <- calc_2x2_measures(a,b,c,d)
res_cintu
## $a
## [1] 110
## 
## $b
## [1] 390
## 
## $c
## [1] 1900
## 
## $d
## [1] 1600
## 
## $Riesgo_expuestos
## [1] 0.22
## 
## $Riesgo_no_expuestos
## [1] 0.5428571
## 
## $RR
## [1] 0.4052632
## 
## $IC95_RR
## [1] 0.3426523 0.4793145
## 
## $RD
## [1] -0.3228571
## 
## $IC95_RD
## [1] -0.3627415 -0.2829728
## 
## $OR
## [1] 0.2375169
## 
## $IC95_OR
## [1] 0.1902691 0.2964973

Crear una tabla gt con los valores de RR, RD OR con sus IC95%

library(gt)
tabla_cinturon <- data.frame(
  Medida = c("RR", "RD", "OR"),
  Estimador = c(res_cintu$RR, res_cintu$RD, res_cintu$OR),
  IC95_Lower = c(res_cintu$IC95_RR[1], res_cintu$IC95_RD[1], res_cintu$IC95_OR[1]),
  IC95_Upper = c(res_cintu$IC95_RR[2], res_cintu$IC95_RD[2], res_cintu$IC95_OR[2])
)
tabla_cinturon %>%
  gt() %>%
  fmt_number(
    columns = vars(Estimador, IC95_Lower, IC95_Upper),
    decimals = 3
  ) %>%
  cols_label(
    Medida = "Medida",
    Estimador = "Estimador",
    IC95_Lower = "IC 95% Lower",
    IC95_Upper = "IC 95% Upper"
  ) %>%
  tab_header(
    title = "Medidas de Asociación: Cinturones de Seguridad y Lesión Fatal"
  )
## Warning: Since gt v0.3.0, `columns = vars(...)` has been deprecated.
## • Please use `columns = c(...)` instead.
Medidas de Asociación: Cinturones de Seguridad y Lesión Fatal
Medida Estimador IC 95% Lower IC 95% Upper
RR 0.405 0.343 0.479
RD −0.323 −0.363 −0.283
OR 0.238 0.190 0.296

Ensayo de la vacuna PCV7 (aleatorizado) Contexto: la vacuna conjugada antineumocócica 7-valente (PCV7) en lactantes, evaluada en un ensayo aleatorizado en Finlandia (FinOM Project) para prevenir otitis media aguda (OMA) por serotipos vacunales.

Tabla 2×2: Episodios de OMA por serotipos vacunales: PCV7: 90 episodios en 1,242 niños Control: 216 episodios en 1,250 niños

Nombrar las clasificaciones

casos_vac <- 90; n_vac <- 1242
casos_ctrl <- 216; n_ctrl <- 1250
res_vac <- calc_vaccine_metrics(casos_vac, n_vac, casos_ctrl, n_ctrl)

res_vac
## $Riesgo_vac
## [1] 0.07246377
## 
## $Riesgo_ctrl
## [1] 0.1728
## 
## $RR
## [1] 0.4193505
## 
## $IC95_RR
## [1] 0.3321813 0.5293943
## 
## $VE
## [1] 0.5806495
## 
## $RD
## [1] -0.1003362
## 
## $IC95_RD
## [1] -0.12577568 -0.07489678
## 
## $NNV
## [1] 9.966489
# crear una tabla gt con los valores de RR, VE, RD y NNV con sus IC95%
tabla_vac <- data.frame(
  Medida = c("RR", "VE", "RD", "NNV"),
  Estimador = c(res_vac$RR, res_vac$VE, res_vac$RD, res_vac$NNV),
  IC95_Lower = c(res_vac$IC95_RR[1], NA, res_vac$IC95_RD[1], NA),
  IC95_Upper = c(res_vac$IC95_RR[2], NA, res_vac$IC95_RD[2], NA)
)
tabla_vac %>%
  gt() %>%
  fmt_number(
    columns = vars(Estimador, IC95_Lower, IC95_Upper),
    decimals = 3
  ) %>%
  cols_label(
    Medida = "Medida",
    Estimador = "Estimador",
    IC95_Lower = "IC 95% Lower",
    IC95_Upper = "IC 95% Upper"
  ) %>%
  tab_header(
    title = "Medidas de Asociación: Ensayo Vacunal PCV7"
  )
## Warning: Since gt v0.3.0, `columns = vars(...)` has been deprecated.
## • Please use `columns = c(...)` instead.
Medidas de Asociación: Ensayo Vacunal PCV7
Medida Estimador IC 95% Lower IC 95% Upper
RR 0.419 0.332 0.529
VE 0.581 NA NA
RD −0.100 −0.126 −0.075
NNV 9.966 NA NA