Este tutorial te guiará a través de las pruebas estadísticas fundamentales para comparar proporciones entre dos grupos, una tarea común en la investigación clínica y epidemiológica.
El intervalo de confianza (IC) permite estimar el rango de valores
plausibles para la diferencia entre dos proporciones
poblacionales.
Un IC del 95% indica que, si se repitiera el estudio muchas veces, el
95% de los intervalos obtenidos contendría la verdadera diferencia
poblacional.
\[ SE_{unpooled} = \sqrt{\frac{p_1(1 - p_1)}{n_1} + \frac{p_2(1 - p_2)}{n_2}} \]
El intervalo de confianza se calcula como:
\[ IC_{95\%} = (p_1 - p_2) \pm Z_{0.975} \times SE_{unpooled} \]
donde \(Z_{0.975} = 1.96\) para un nivel de confianza del 95%.
| Grupo | Pacientes | Trombosis | Proporción |
|---|---|---|---|
| Fármaco A | 150 | 12 | 0.08 |
| Warfarina | 160 | 24 | 0.15 |
# Proporciones observadas
p1 <- 12 / 150
p2 <- 24 / 160
# Tamaños muestrales
n1 <- 150
n2 <- 160
# Error estándar sin agrupación
SE_unpooled <- sqrt((p1 * (1 - p1) / n1) + (p2 * (1 - p2) / n2))
# Intervalo de confianza del 95%
IC_inf <- (p1 - p2) - 1.96 * SE_unpooled
IC_sup <- (p1 - p2) + 1.96 * SE_unpooled
c(IC_inf, IC_sup)
## [1] -0.1403293685 0.0003293685
Esta prueba se utiliza para comparar proporciones entre dos grupos independientes, por ejemplo, la proporción de éxito entre dos tratamientos médicos.
La prueba Z se utiliza para determinar si existe una diferencia significativa entre las proporciones de dos grupos independientes.
\[ H_0: p_1 = p_2 \quad \text{(no hay diferencia entre las proporciones poblacionales)} \]
\[ H_a: p_1 \neq p_2 \quad \text{(existe una diferencia entre las proporciones poblacionales)} \]
\[ \hat{p}_1 = \frac{x_1}{n_1} \quad , \quad \hat{p}_2 = \frac{x_2}{n_2} \]
donde:
- \(x_1\) y \(x_2\) son los conteos de “éxitos” en cada
grupo.
- \(n_1\) y \(n_2\) son los tamaños muestrales.
Cuando se asume que \(p_1 = p_2\) bajo la hipótesis nula, se calcula la proporción combinada (o “pooled proportion”):
\[ \hat{p}_{pool} = \frac{x_1 + x_2}{n_1 + n_2} \]
\[ SE_{pool} = \sqrt{\hat{p}_{pool} (1 - \hat{p}_{pool}) \left(\frac{1}{n_1} + \frac{1}{n_2}\right)} \]
\[ Z = \frac{(\hat{p}_1 - \hat{p}_2)}{SE_{pool}} \]
Este estadístico sigue aproximadamente una distribución normal estándar bajo \(H_0\).
Para un nivel de significancia \(\alpha = 0.05\):
El valor p se obtiene como:
\[ p\text{-valor} = 2 \times P(Z > |Z_{obs}|) \]
Si el valor p < 0.05, se concluye que existe una diferencia estadísticamente significativa entre las proporciones de los dos grupos.
Se desea comparar la proporción de pacientes con trombosis entre dos tratamientos: Fármaco A y Warfarina.
| Grupo | Pacientes | Trombosis | Proporción |
|---|---|---|---|
| Fármaco A | 150 | 12 | 0.08 |
| Warfarina | 160 | 24 | 0.15 |
# Datos
exitos <- c(12, 24)
totales <- c(150, 160)
# Prueba Z sin corrección de continuidad
resultado_z <- prop.test(exitos, totales, correct = FALSE)
resultado_z
##
## 2-sample test for equality of proportions without continuity correction
##
## data: exitos out of totales
## X-squared = 3.6959, df = 1, p-value = 0.05455
## alternative hypothesis: two.sided
## 95 percent confidence interval:
## -0.1403280761 0.0003280761
## sample estimates:
## prop 1 prop 2
## 0.08 0.15
# Cálculo manual de la estadística Z y el valor p
p1 <- 12 / 150
p2 <- 24 / 160
p_pool <- (12 + 24) / (150 + 160)
SE_pool <- sqrt(p_pool * (1 - p_pool) * (1/150 + 1/160))
Z <- (p1 - p2) / SE_pool
p_valor <- 2 * (1 - pnorm(abs(Z)))
list(Z = Z, p_valor = p_valor)
## $Z
## [1] -1.922463
##
## $p_valor
## [1] 0.05454753
Si el valor p es menor que 0.05, se concluye que existe una diferencia estadísticamente significativa entre las proporciones.
Si el valor p es mayor que 0.05, no hay evidencia suficiente para afirmar que los tratamientos difieren.
La prueba de Chi-cuadrado se utiliza para evaluar si existe una
asociación significativa entre dos variables categóricas.
Compara las frecuencias observadas con las esperadas bajo la hipótesis
de independencia.
El estadístico de la prueba de Chi-cuadrado mide cuánto difieren las frecuencias observadas de las esperadas bajo la hipótesis nula de independencia entre las variables.
\[ \chi^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
donde:
\[ E_{ij} = \frac{(\text{Total de la fila}_i) \times (\text{Total de la columna}_j)}{\text{Gran total}} \]
El estadístico \(\chi^2\) se compara con la distribución Chi-cuadrado con:
\[ gl = (r - 1)(c - 1) \]
donde \(r\) es el número de filas y \(c\) el número de columnas de la tabla de contingencia.
Si el valor p asociado a \(\chi^2\) es menor que el nivel de significancia (por ejemplo, \(\alpha = 0.05\)), se rechaza la hipótesis nula, concluyendo que existe asociación significativa entre las variables categóricas.
# Tabla de contingencia
tabla <- matrix(c(80, 20, 50, 50), nrow = 2, byrow = FALSE)
colnames(tabla) <- c("Cáncer", "Control")
rownames(tabla) <- c("Fumador", "No Fumador")
tabla
## Cáncer Control
## Fumador 80 50
## No Fumador 20 50
# Prueba de Chi-cuadrado
chisq.test(tabla)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla
## X-squared = 18.484, df = 1, p-value = 1.714e-05
Interpretación: Si el valor p es menor que 0.05, existe evidencia estadísticamente significativa de asociación entre el tabaquismo y el cáncer.
El Test Exacto de Fisher se aplica cuando las frecuencias esperadas en alguna celda son menores que 5. Es una prueba no paramétrica que calcula la probabilidad exacta de observar una distribución igual o más extrema que la obtenida.
# Tabla con frecuencias pequeñas
tabla_rara <- matrix(c(4, 3, 1, 7), nrow = 2, byrow = FALSE)
colnames(tabla_rara) <- c("Náuseas", "Sin Náuseas")
rownames(tabla_rara) <- c("Tratamiento", "Placebo")
tabla_rara
## Náuseas Sin Náuseas
## Tratamiento 4 1
## Placebo 3 7
# Test exacto de Fisher
fisher.test(tabla_rara)
##
## Fisher's Exact Test for Count Data
##
## data: tabla_rara
## p-value = 0.1189
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
## 0.5027782 521.2731861
## sample estimates:
## odds ratio
## 7.876343
Interpretación: Si el valor p es menor que 0.05, existe evidencia significativa de diferencia entre los tratamientos. Si el valor p es mayor que 0.05, no se observa diferencia estadísticamente significativa.
Los métodos de simulación, como la prueba de permutación y el bootstrapping, no requieren supuestos de normalidad ni de tamaño de muestra grande. Son útiles cuando los métodos tradicionales no son apropiados o se desea una estimación más robusta.
Evalúa si la diferencia observada entre las proporciones podría deberse al azar al redistribuir aleatoriamente las observaciones entre los grupos.
library(infer)
# Datos simulados
datos_farmaco <- data.frame(
tratamiento = rep(c("Farmaco_A", "Warfarina"), times = c(150, 160)),
resultado = c(rep("Trombosis", 12), rep("No_Trombosis", 138),
rep("Trombosis", 24), rep("No_Trombosis", 136))
)
# Diferencia observada
diferencia_obs <- datos_farmaco %>%
specify(resultado ~ tratamiento, success = "Trombosis") %>%
calculate(stat = "diff in props", order = c("Farmaco_A", "Warfarina"))
# Distribución nula por permutación
distribucion_nula <- datos_farmaco %>%
specify(resultado ~ tratamiento, success = "Trombosis") %>%
hypothesize(null = "independence") %>%
generate(reps = 5000, type = "permute") %>%
calculate(stat = "diff in props", order = c("Farmaco_A", "Warfarina"))
# Cálculo del valor p
get_p_value(distribucion_nula, obs_stat = diferencia_obs, direction = "two-sided")
## # A tibble: 1 × 1
## p_value
## <dbl>
## 1 0.0832
Interpretación: El valor p se obtiene a partir de la proporción de diferencias simuladas tan extremas como la observada bajo la hipótesis nula.
El método de bootstrapping permite estimar el intervalo de confianza para la diferencia de proporciones mediante remuestreo con reemplazo.
# Distribución bootstrap
distribucion_bootstrap <- datos_farmaco %>%
specify(resultado ~ tratamiento, success = "Trombosis") %>%
generate(reps = 5000, type = "bootstrap") %>%
calculate(stat = "diff in props", order = c("Farmaco_A", "Warfarina"))
# Intervalo de confianza del 95%
get_confidence_interval(distribucion_bootstrap, level = 0.95, type = "percentile")
## # A tibble: 1 × 2
## lower_ci upper_ci
## <dbl> <dbl>
## 1 -0.141 -0.00108
Interpretación: El intervalo de confianza obtenido mediante bootstrapping puede compararse con el intervalo teórico calculado en la sección 2. Si el intervalo incluye 0, no existe evidencia estadística de diferencia entre los tratamientos.
| Característica | Prueba Z / Chi-cuadrado | Test de Fisher | Permutación / Bootstrap |
|---|---|---|---|
| Tamaño de muestra | Grande (≥5 esperados) | Pequeña (<5 esperados) | Cualquiera |
| Supuestos | Independencia, n grande | Independencia | Ninguno |
| Resultado | p-valor, IC | p-valor exacto | p o IC simulados |
| Ventajas | Simplicidad | Exactitud | Flexibilidad |
| Limitaciones | Poco fiable si n pequeño | Limitado a 2x2 | Mayor carga computacional |