Tamaños de efecto e intervalos: lo que el p-value no dice

r
estadistica
Por qué un p-value solo es insuficiente. Cohen’s d para diferencias de medias, eta-squared para ANOVA, R² y betas estandarizados, odds ratios para logística. El paquete effectsize como API unificada.

El problema: p < 0.05 no significa “importa”

El p-value responde una pregunta muy específica: “¿es probable que esta diferencia haya ocurrido por azar si la hipótesis nula fuera cierta?”.

No responde:

  • “¿Cuán grande es la diferencia?”
  • “¿Es prácticamente relevante?”
  • “¿Vale la pena actuar sobre este hallazgo?”

Con muestras grandes, cualquier diferencia es estadísticamente significativa. Un ensayo clínico con 100 000 pacientes puede detectar que un fármaco reduce el dolor en 0.1 puntos en una escala de 100 con p < 0.001. Estadísticamente cierto. Clínicamente irrelevante.

La solución es reportar tamaños de efecto junto con p-values. El tamaño de efecto cuantifica la magnitud, independientemente del tamaño muestral.

Cohen’s d para diferencias de medias

Cuando comparas dos grupos con t-test, el tamaño de efecto estándar es Cohen’s d:

\[d = \frac{\bar{X_1} - \bar{X_2}}{s_{\text{pooled}}}\]

Es la diferencia de medias expresada en unidades de desviación estándar combinada. Interpretable y comparable entre estudios.

library(effectsize)

cohens_d(Petal.Length ~ Species,
         data = iris,
         subset = Species %in% c("setosa", "versicolor"))
#> Cohen's d |         95% CI
#> --------------------------
#> -7.21     | [-8.34, -6.08]

Heurísticas de Cohen (1988):

  • 0.2: efecto pequeño.
  • 0.5: efecto mediano.
  • 0.8: efecto grande.

Aviso: estas son reglas de pulgar, no leyes. Cohen mismo dijo que dependen del campo. Una d = 0.2 en intervenciones educativas es notable. En farmacología puede ser trivial. Lee el contexto antes de aplicar el etiquetado mecánicamente.

Eta-squared para ANOVA

En ANOVA, el equivalente es eta-squared (η²): la proporción de varianza total explicada por el factor.

modelo <- aov(Sepal.Length ~ Species, data = iris)
eta_squared(modelo)
#> # Effect Size for ANOVA
#>
#> Parameter | Eta2 |       95% CI
#> -------------------------------
#> Species   | 0.62 | [0.54, 1.00]

Lectura: la especie explica el 62 % de la varianza en longitud del sépalo.

Heurísticas de Cohen para η²:

  • 0.01: pequeño.
  • 0.06: mediano.
  • 0.14: grande.

Para ANOVA con múltiples factores, eta-squared parcial (η²ₚ) es la versión que controla por los otros factores. Es lo que reporta SPSS por defecto y lo que aparece en la mayoría de papers.

eta_squared(modelo, partial = TRUE)

R² y betas estandarizados para regresión

En regresión lineal, es el tamaño de efecto global: proporción de varianza explicada. Ya lo viste en el tutorial de regresión simple.

Para tamaños de efecto por predictor, hay dos opciones:

1. Betas estandarizados, coeficientes en unidades de SD. Permiten comparar la importancia relativa de predictores con escalas distintas.

modelo <- lm(mpg ~ wt + hp, data = mtcars)
standardize_parameters(modelo)
#> # Standardization method: refit
#>
#> Parameter   | Std. Coef. |         95% CI
#> -----------------------------------------
#> (Intercept) |  -3.27e-16 | [-0.13, 0.13]
#> wt          |      -0.63 | [-0.85, -0.40]
#> hp          |      -0.36 | [-0.59, -0.14]

wt tiene mayor impacto que hp (en valor absoluto, 0.63 vs 0.36), algo que no podías saber comparando coeficientes brutos porque están en unidades distintas.

2. R² incremental, cuánta varianza adicional explica añadir un predictor al modelo. Útil para evaluar si vale la pena la complejidad extra.

modelo_sin <- lm(mpg ~ wt, data = mtcars)
modelo_con <- lm(mpg ~ wt + hp, data = mtcars)

summary(modelo_sin)$r.squared   # 0.7528
summary(modelo_con)$r.squared   # 0.8268
# R² incremental por añadir hp: 0.074 (un 7.4 % adicional explicado)

Odds ratios cuando hay logística

Para regresión logística (variable dependiente binaria), el coeficiente bruto es un log-odds. Para reportar, hay que exponenciar a odds ratio:

modelo_log <- glm(am ~ wt + hp, data = mtcars, family = binomial)

# Coeficientes en escala log-odds (no interpretables fácilmente)
coef(modelo_log)

# En escala odds ratio (sí interpretables)
exp(coef(modelo_log))
exp(confint(modelo_log))   # con IC

Interpretación: si OR = 0.3 para wt, significa “por cada unidad adicional de peso, las odds de tener transmisión manual se multiplican por 0.3” (es decir, bajan al 30 %).

Heurísticas para OR (en epidemiología):

  • OR ≈ 1: sin asociación.
  • OR > 1: factor de riesgo (en el sentido de mayor probabilidad).
  • OR < 1: factor protector.

Trampa común: confundir OR con riesgo relativo (RR). En eventos raros (incidencia < 10 %), OR ≈ RR. En eventos comunes, OR sobreestima RR.

El paquete effectsize: API unificada

effectsize (del autor de bayestestR y performance, parte del easystats) ofrece una API consistente para todos los tamaños de efecto:

library(effectsize)

# Para t-test
cohens_d(y ~ grupo, data = df)
hedges_g(y ~ grupo, data = df)        # Cohen's d con corrección para muestras pequeñas
glass_delta(y ~ grupo, data = df)     # cuando varianzas son muy distintas

# Para ANOVA
eta_squared(aov_modelo)
omega_squared(aov_modelo)             # menos sesgada que eta-squared
epsilon_squared(aov_modelo)

# Para correlación
# (la correlación ES su propio tamaño de efecto)

# Para regresión
standardize_parameters(lm_modelo)
r2(lm_modelo)

Todas las funciones devuelven valor + intervalo de confianza por defecto. No hay que pedirlo aparte.

IC siempre, no solo punto estimado

El error final de reporting: dar el tamaño de efecto sin su intervalo de confianza.

# Mal: solo el punto
"Cohen's d = 0.42"

# Bien: con IC
"Cohen's d = 0.42 (IC 95 %: 0.18, 0.66)"

El IC comunica incertidumbre. “d = 0.42 con IC de [−0.05, 0.89]” dice algo muy distinto de “d = 0.42 con IC de [0.40, 0.44]”. El primero podría ser ruido. El segundo es un efecto consistente.

Todas las funciones de effectsize devuelven el IC. Reportarlo es trivial, es solo cuestión de hábito.

Trampas habituales

  • Reportar p-values sin tamaño de efecto. Reviewers serios lo penalizan. APA, NIH y la mayoría de revistas científicas modernas exigen tamaño de efecto + IC.
  • Aplicar heurísticas de Cohen sin contexto. En medicina, una d = 0.2 puede salvar vidas. En otras áreas es ruido. Lee la literatura de tu campo antes de etiquetar.
  • Confundir OR con RR. En logística, OR es lo que sale. En estudios de cohorte con outcomes comunes, calcula RR explícitamente con epitools::riskratio() u otros paquetes.
  • Sobre-interpretar tamaños de efecto en muestras pequeñas. Cohen’s d con n = 20 por grupo es muy ruidoso, el IC suele ser enorme. El número punto puede sugerir un efecto grande que el IC desmiente.

En la siguiente entrega

Has aprendido a comunicar la magnitud, no solo la significancia. La siguiente pieza es operativa: cómo producir tablas estadísticas publicables sin pelearse con formateo. El paquete gtsummary es el estándar moderno, convierte modelos y descriptivas en tablas pulidas en una línea. Lo siguiente.