Apunte 07 — Inferencia estadística frecuentista

Analítica de Personas · Semestre otoño 2026 · Semana 3 · Referencia

📝 Nota terminológica En este apunte y en todo el curso usaremos el término en inglés p-value (en vez de "valor p" o "valor-p"). La razón es pragmática: R reporta la columna como p.value, la literatura internacional usa p-value, y mantener el término en inglés evita confusiones cuando los alumnos consulten fuentes en ambos idiomas.

1. ¿Qué es la inferencia estadística?

La inferencia estadística nos permite hacer afirmaciones sobre una población a partir de una muestra. En people analytics, queremos saber si lo que observamos en los datos de InnovaCo (nuestra muestra) refleja un patrón real o podría ser producto del azar.

El enfoque frecuentista se basa en una idea central: si no hubiera efecto real (hipótesis nula), ¿qué tan probable sería observar datos como los nuestros? Esa probabilidad es el p-value.

El marco de prueba de hipótesis

PasoQué hacerEjemplo
1. Plantear H₀ y H₁H₀: no hay efecto/diferencia. H₁: sí lo hay.H₀: la satisfacción es igual entre quienes se van y quienes se quedan
2. Elegir pruebaDepende del tipo de variables y supuestosPrueba t (dos medias, variable continua)
3. Fijar αNivel de significancia (convencionalmente .05)α = .05
4. Calcular estadísticoEjecutar la prueba en Rt.test(satisfaccion ~ rotacion)
5. DecidirSi p < α, rechazamos H₀p = .0003 < .05 → rechazamos H₀
6. Reportar tamaño de efecto¿Cuán grande es la diferencia?d de Cohen = 0.45 (mediano)
⚠️ Rechazar H₀ ≠ "probamos que H₁ es verdadera" El p-value es la probabilidad de los datos dado H₀, no la probabilidad de H₀ dados los datos. Rechazar H₀ significa que los datos son muy improbables bajo H₀, no que H₁ sea "cierta". Esta distinción importa cuando comunicamos resultados al VP.

2. Árbol de decisión: ¿qué prueba usar?

🌳 Guía rápida para elegir la prueba

¿Qué tipo de variables estoy comparando?

📊 Continua vs. categórica (2 grupos) → Prueba t / Mann-Whitney

📊 Continua vs. categórica (3+ grupos) → ANOVA / Kruskal-Wallis

📊 Categórica vs. categórica → Chi-cuadrado / Fisher

📊 Continua vs. continua → Correlación de Pearson / Spearman

📊 Continua pre-post (mismas personas) → t pareada / Wilcoxon signado

3. Pruebas para comparar dos grupos

3.1 Prueba t de Student (paramétrica)

¿Cuándo? Comparar la media de una variable continua entre dos grupos independientes. Supone normalidad (robusta con n > 30) y varianzas similares (R usa la corrección de Welch por defecto).

# t de Student para dos muestras independientes
t.test(satisfaccion_laboral ~ rotacion, data = innovaco)

# Guardar y extraer componentes
res_t <- t.test(satisfaccion_laboral ~ rotacion, data = innovaco)
res_t$p.value       # p-value
res_t$estimate       # medias de cada grupo
res_t$conf.int       # IC 95% de la diferencia
res_t$statistic      # valor del estadístico t

3.2 Prueba t pareada (mismas personas, dos momentos)

# Si tuviéramos satisfacción medida antes y después de una intervención
t.test(datos$satisfaccion_post, datos$satisfaccion_pre,
       paired = TRUE)

3.3 Mann-Whitney U (no paramétrica)

¿Cuándo? Cuando la variable no es normal (ej: escalas Likert 1-5 con distribución asimétrica, n pequeño, o variables ordinales). Compara medianas en vez de medias.

# Equivalente no paramétrico de la prueba t
wilcox.test(satisfaccion_laboral ~ rotacion, data = innovaco)

# Versión pareada (equivalente no paramétrico de t pareada)
wilcox.test(datos$post, datos$pre, paired = TRUE)
¿Paramétrica o no paramétrica? En la práctica, con muestras grandes (n > 30 por grupo), la prueba t es robusta ante violaciones de normalidad. Con la muestra de InnovaCo (n = 1.200), la prueba t es perfectamente apropiada. Las alternativas no paramétricas son más relevantes con muestras pequeñas o distribuciones muy sesgadas.

Tabla comparativa: 2 grupos

PruebaTipoSupuestosEn RCompara
t de StudentParamétricaNormalidad, varianzas ~igualest.test(y ~ grupo)Medias
Welch t-testParamétricaNormalidad (varianzas pueden diferir)t.test(y ~ grupo) (default en R)Medias
Mann-Whitney UNo paramétricaIndependenciawilcox.test(y ~ grupo)Distribuciones/medianas

4. Pruebas para comparar tres o más grupos

4.1 ANOVA de un factor (paramétrica)

¿Cuándo? Comparar la media de una variable continua entre 3+ grupos (ej: satisfacción por departamento). Supone normalidad y homogeneidad de varianzas.

# ANOVA: ¿la satisfacción difiere entre departamentos?
modelo_anova <- aov(satisfaccion_laboral ~ departamento, data = innovaco)
summary(modelo_anova)

# Comparaciones post-hoc (¿CUÁLES departamentos difieren?)
TukeyHSD(modelo_anova)

# Tamaño de efecto: eta-cuadrado (η²)
# η² = SS_between / SS_total
ss <- summary(modelo_anova)[[1]]
eta_sq <- ss["departamento", "Sum Sq"] / sum(ss[, "Sum Sq"])
eta_sq

4.2 Kruskal-Wallis (no paramétrica)

# Equivalente no paramétrico del ANOVA
kruskal.test(satisfaccion_laboral ~ departamento, data = innovaco)

# Post-hoc no paramétrico: Dunn test (requiere paquete dunn.test)
# install.packages("dunn.test")
# dunn.test::dunn.test(innovaco$satisfaccion_laboral, innovaco$departamento)

Tabla comparativa: 3+ grupos

PruebaTipoSupuestosEn RPost-hoc
ANOVAParamétricaNormalidad, homogeneidad de varianzasaov(y ~ grupo)TukeyHSD()
Welch ANOVAParamétricaNormalidad (varianzas pueden diferir)oneway.test(y ~ grupo)Games-Howell
Kruskal-WallisNo paramétricaIndependenciakruskal.test(y ~ grupo)Dunn test

5. Pruebas para variables categóricas

5.1 Chi-cuadrado de independencia

¿Cuándo? Evaluar si hay asociación entre dos variables categóricas (ej: ¿la rotación depende del departamento?).

# Tabla de contingencia
tabla <- table(innovaco$departamento, innovaco$rotacion)
tabla

# Chi-cuadrado
chi_res <- chisq.test(tabla)
chi_res

# Componentes útiles
chi_res$statistic    # valor chi-cuadrado
chi_res$p.value      # p-value
chi_res$expected     # frecuencias esperadas bajo H₀
chi_res$residuals    # residuos estandarizados
chi_res$stdres       # residuos estandarizados ajustados (mejores)
Los residuos estandarizados ajustados son tu mejor amigo chi_res$stdres te dice dónde está la asociación: valores con |z| > 2 son celdas donde hay significativamente más (positivo) o menos (negativo) casos de lo esperado. Ejemplo: un residuo de +3.2 en "Ventas × Sí" significa que Ventas tiene significativamente más rotación de la esperada.

5.2 Prueba exacta de Fisher

¿Cuándo? Cuando alguna celda esperada tiene frecuencia < 5. Más precisa que chi-cuadrado con muestras pequeñas.

# Para tablas 2x2 o con celdas pequeñas
fisher.test(tabla)

# Si la tabla es grande, Fisher puede ser lento.
# Alternativa: simular el p-value
chisq.test(tabla, simulate.p.value = TRUE, B = 10000)

5.3 Prueba de proporciones

# Comparar proporciones entre 2 grupos
# ¿La tasa de rotación difiere entre hombres y mujeres?
tabla_genero <- table(innovaco$genero, innovaco$rotacion)
prop.test(tabla_genero)

6. Correlaciones

6.1 Pearson (paramétrica)

Mide la fuerza y dirección de la relación lineal entre dos variables continuas. Rango: −1 a +1.

# Correlación entre dos variables
cor(innovaco$satisfaccion_laboral, innovaco$antiguedad_anios)

# Con test de significancia
cor.test(innovaco$satisfaccion_laboral, innovaco$antiguedad_anios)

# Matriz completa de correlaciones
vars_num <- innovaco |>
  select(where(is.numeric))
mat_cor <- cor(vars_num)
round(mat_cor, 2)

6.2 Spearman (no paramétrica)

¿Cuándo? Variables ordinales, relaciones no lineales, o distribuciones no normales. Mide relación monotónica (no necesariamente lineal).

# Correlación de Spearman
cor(innovaco$satisfaccion_laboral, innovaco$antiguedad_anios,
    method = "spearman")

cor.test(innovaco$satisfaccion_laboral, innovaco$antiguedad_anios,
         method = "spearman")

6.3 Visualización con corrplot

library(corrplot)

# Opciones de visualización
corrplot(mat_cor,
         method = "color",        # "circle", "number", "pie", "shade"
         type   = "upper",        # solo triángulo superior
         addCoef.col = "black",   # mostrar números
         tl.col = "black",        # color de etiquetas
         tl.cex = 0.8,            # tamaño de etiquetas
         number.cex = 0.7,        # tamaño de números
         order = "hclust",        # agrupar variables similares
         col = colorRampPalette(c("#EF4444", "white", "#16A34A"))(200))

Tabla comparativa: correlaciones

TipoSupuestosEn RMide
Pearson (r)Linealidad, normalidad bivariadacor(x, y) o cor(x, y, method = "pearson")Relación lineal
Spearman (ρ)Monotonicidadcor(x, y, method = "spearman")Relación monotónica
Kendall (τ)Concordancia de parescor(x, y, method = "kendall")Concordancia (más robusto, más conservador)

7. Tamaños de efecto: por qué importan

El p-value responde "¿existe un efecto?". El tamaño de efecto responde "¿cuán grande es?". Con muestras grandes (como n = 1.200), casi cualquier diferencia es significativa, incluso diferencias triviales. Para tomar decisiones de gestión, necesitamos saber si el efecto es lo suficientemente grande como para actuar.

❌ Solo p-value

"La diferencia en satisfacción entre quienes se van y quienes se quedan es significativa (p = .0003)."

¿Y? ¿Es grande o pequeña? ¿Invierto $50 millones en programas de satisfacción?

✅ P-value + tamaño de efecto

"La diferencia es significativa (p = .0003) y de magnitud mediana (d = 0.45). Un empleado insatisfecho tiene casi el doble de chances de irse."

Ahora sí puedo decidir.

7.1 d de Cohen (para comparación de medias)

d = |M₁ − M₂| / SDpooled
# Cálculo manual de d de Cohen
stats <- innovaco |>
  group_by(rotacion) |>
  summarise(media = mean(satisfaccion_laboral),
            sd    = sd(satisfaccion_laboral),
            n     = n())

sd_pooled <- sqrt(
  ((stats$n[1] - 1) * stats$sd[1]^2 +
   (stats$n[2] - 1) * stats$sd[2]^2) /
  (stats$n[1] + stats$n[2] - 2)
)

d_cohen <- abs(diff(stats$media)) / sd_pooled
d_cohen

7.2 V de Cramér (para chi-cuadrado)

V = √(χ² / (n × (min(filas, columnas) − 1)))
# Cálculo manual
n_total <- sum(tabla)
k <- min(nrow(tabla), ncol(tabla))
v_cramer <- sqrt(chi_res$statistic / (n_total * (k - 1)))
v_cramer

7.3 η² (eta-cuadrado, para ANOVA)

η² = SSbetween / SStotal

7.4 r como tamaño de efecto

La propia correlación de Pearson (r) es un tamaño de efecto. También se puede convertir t a r:

r = √(t² / (t² + gl))

Tabla de referencia: magnitudes convencionales

MedidaPequeñoMedianoGrandePara qué prueba
d de Cohen0.200.500.80Prueba t, comparación de medias
r0.100.300.50Correlación
V de Cramér0.100.300.50Chi-cuadrado
η² (eta-cuadrado)0.010.060.14ANOVA
Odds Ratio1.52.54.3Regresión logística (equivalencias aproximadas)
📝 Regla para comunicar al VP "El p-value le dice si existe un efecto. El tamaño del efecto le dice si vale la pena hacer algo al respecto. Con 1.200 empleados, casi todo da significativo. Un efecto pequeño (d = 0.2) probablemente no justifica una intervención costosa; uno mediano (d = 0.5) o grande (d = 0.8) sí."

8. Supuestos y cuándo verificarlos

Normalidad

# Test de Shapiro-Wilk (máx ~5.000 obs)
shapiro.test(innovaco$satisfaccion_laboral)

# Visualización: QQ-plot
qqnorm(innovaco$satisfaccion_laboral)
qqline(innovaco$satisfaccion_laboral, col = "red")

# Con ggplot2
ggplot(innovaco, aes(sample = satisfaccion_laboral)) +
  stat_qq() + stat_qq_line(color = "red")

Homogeneidad de varianzas

# Test de Levene (requiere paquete car)
# car::leveneTest(satisfaccion_laboral ~ rotacion, data = innovaco)

# Alternativa rápida: comparar SDs por grupo
innovaco |>
  group_by(rotacion) |>
  summarise(sd = sd(satisfaccion_laboral))
# Si la razón SD_mayor / SD_menor < 2, está bien
Regla práctica Con n > 30 por grupo y grupos de tamaño similar, las pruebas paramétricas son robustas a violaciones moderadas de normalidad y homogeneidad de varianzas. Con la muestra de InnovaCo, rara vez será necesario recurrir a alternativas no paramétricas. Pero es importante saber que existen para cuando trabajen con muestras más pequeñas.

9. Mapa resumen de pruebas

Variable dependienteVariable independienteParamétricaNo paramétricaTamaño de efecto
ContinuaCategórica (2 grupos)t.test()wilcox.test()d de Cohen
ContinuaCategórica (3+ grupos)aov()kruskal.test()η²
CategóricaCategóricachisq.test()fisher.test()V de Cramér
ContinuaContinuacor(method="pearson")cor(method="spearman")r / ρ
Continua (pre-post)Tiempo (2 mediciones)t.test(paired=TRUE)wilcox.test(paired=TRUE)d de Cohen