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
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
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
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 |