Prueba de hipótesis en conjuntos de datos: guía completa con Python y R
De la teoría a la práctica: contraste ideas con rigor estadístico usando código limpio.
Por HolaGPT Editorial · 10 min lectura · 2026-08-04
Un analista de datos recibe un archivo con cientos de registros. El jefe pregunta: ¿los resultados del grupo A son mejores que los del B? O, ¿la campaña de marketing aumentó las ventas? La respuesta rápida suele ser un número, pero la estadística exige un respaldo formal: una prueba de hipótesis.
Este artículo recorre el proceso completo para contrastar afirmaciones sobre tus datos. Desde la formulación de hipótesis hasta la implementación con Python y R, pasarás de la intuición a la evidencia. Si además usas herramientas como HolaGPT para agilizar la generación de código, tendrás un flujo aún más rápido, pero aquí te explicamos la base para que entiendas qué hay detrás de cada p-valor.
No necesitas un doctorado en estadística, solo ganas de tomar decisiones basadas en datos con métodos transparentes y replicables.
¿Qué es realmente una prueba de hipótesis?
Una prueba de hipótesis es un procedimiento formal para evaluar si una afirmación sobre un parámetro de la población (media, proporción, varianza) es compatible con los datos observados en una muestra. En esencia, comparas dos explicaciones rivales: la hipótesis nula y la alternativa.
La hipótesis nula (H₀) representa el statu quo o la ausencia de efecto. Por lo general afirma que no hay diferencia, relación o cambio. La hipótesis alternativa (H₁) es lo que realmente quieres probar: una diferencia significativa, un aumento, una correlación inesperada.
El proceso gira en torno al p-valor: la probabilidad de obtener un resultado tan extremo (o más) que el observado, asumiendo que H₀ es cierta. Si esa probabilidad cae por debajo de un umbral preestablecido, el nivel de significación (α, normalmente 0.05), rechazas H₀ a favor de H₁. En otras palabras, los datos hablan tan fuerte que el azar resulta una explicación poco plausible.
La clave no es solo mirar el p-valor, sino interpretarlo en el contexto del problema. Un resultado estadísticamente significativo no implica automáticamente relevancia práctica; tamaños de muestra muy grandes pueden hacer que diferencias minúsculas arrojen p-valores ínfimos. Siempre acompaña la prueba con una medida del tamaño del efecto.
Tipos de pruebas y cuándo utilizarlas
El árbol de decisión para elegir la prueba adecuada se bifurca según el tipo de datos y el diseño del estudio. Vamos a los escenarios más comunes.
Pruebas paramétricas: cuando los datos cumplen supuestos
Las pruebas paramétricas suponen que los datos provienen de una distribución específica (casi siempre la normal) y que las varianzas entre grupos son homogéneas. Ofrecen más potencia estadística cuando esos supuestos se cumplen.
- Test t de Student para una muestra: comparas la media muestral con un valor conocido. Ejemplo: ¿el tiempo promedio de respuesta de un servidor es distinto de 200 ms?
- Test t para muestras independientes: comparas las medias de dos grupos no relacionados. Ejemplo: ¿los clientes del plan premium gastan más en promedio que los del plan básico?
- Test t para muestras pareadas: cuando haces dos mediciones sobre el mismo sujeto o unidad experimental. Ejemplo: antes y después de una formación, ¿cambió la productividad?
- ANOVA de un factor: cuando tienes tres o más grupos independientes y quieres contrastar si al menos una media difiere. Ejemplo: ¿hay diferencia en el rendimiento de tres versiones de una página de aterrizaje?
Pruebas no paramétricas: cuando los supuestos no se sostienen
Si la normalidad se rompe o trabajas con datos ordinales, las alternativas no paramétricas son tu salvación. No asumen distribución alguna y se basan en rangos.
- U de Mann-Whitney: versión no paramétrica del t-test para dos muestras independientes.
- Wilcoxon de rangos con signo: alternativa al t-test pareado.
- Kruskal-Wallis: sustituye al ANOVA de un factor cuando las varianzas no son homogéneas o los datos son ordinales.
Pruebas para variables categóricas
- Chi-cuadrado de independencia: evalúa si existe asociación entre dos variables categóricas. Ejemplo: ¿la tasa de clics varía según el diseño del botón (rojo, azul, verde)?
- Prueba exacta de Fisher: alternativa cuando las frecuencias esperadas son bajas (menos de 5 en alguna celda).
Conocer este abanico te permite enfrentar la mayoría de preguntas de negocio. Pero la elección exacta dependerá de los datos, y aquí es donde muchos tropiezan.
Pasos para realizar una prueba de hipótesis sin atajos
Un flujo disciplinado evita malinterpretaciones y errores de tipo I (falso positivo) o tipo II (falso negativo). Sigue esta secuencia con cada conjunto de datos.
- Comprende el problema de negocio. ¿Qué decisión tomarás con el resultado? Define una pregunta precisa.
- Formula H₀ y H₁. Por ejemplo: H₀: μ_A - μ_B = 0; H₁: μ_A ≠ μ_B (bilateral) o μ_A > μ_B (unilateral).
- Establece el nivel de significación α. El clásico 0.05 asume que aceptas un 5% de probabilidad de rechazar H₀ cuando es verdadera. Si el coste de un error es alto, baja a 0.01.
- Verifica los supuestos. Normalidad (gráfico Q-Q, Shapiro-Wilk), homocedasticidad (Levene, Bartlett). Determinarás si usar una paramétrica o no paramétrica.
- Selecciona la prueba estadística. Con base en los pasos anteriores y el tipo de datos.
- Calcula el estadístico de prueba y el p-valor. Con Python, R o incluso una calculadora científica, pero el software es el estándar.
- Compara p-valor con α. Si p ≤ α, rechazas H₀. Si p > α, no puedes rechazarla (que no es lo mismo que aceptar H₀).
- Interpreta en contexto. El resultado estadístico sin conclusión de negocio no sirve. Añade el tamaño del efecto y un intervalo de confianza.
Veamos este proceso en acción con código real.
Implementación en Python con SciPy y Statsmodels
Python, con librerías como SciPy, Statsmodels y Pingouin, cubre casi cualquier prueba. Aquí tres ejemplos prácticos.
Test t para una muestra
Un call center quiere comprobar si el tiempo medio de atención difiere del objetivo de 300 segundos. Cargamos 50 llamadas de muestra.
import numpy as np
from scipy import stats
tiempos = np.array([284, 310, 295, 320, 298, 275, 302, 315, 290, 300,
305, 288, 312, 297, 304, 286, 309, 291, 314, 296,
280, 299, 307, 283, 311, 292, 316, 287, 308, 293,
278, 303, 289, 313, 294, 276, 301, 285, 317, 282,
306, 279, 318, 281, 305, 277, 304, 286, 310, 297])
t_stat, p_value = stats.ttest_1samp(tiempos, popmean=300)
print(f'Estadístico t: {t_stat:.3f}, p-valor: {p_value:.4f}')
Si el p-valor supera 0.05, no hay evidencia para decir que la media actual difiere del objetivo.
Test t para muestras independientes
Comparamos el gasto en dos segmentos de clientes (VIP y regular). Suponemos normalidad razonable tras revisar histogramas.
import pandas as pd
from scipy.stats import ttest_ind, shapiro, levene
# Datos simulados
df = pd.DataFrame({
'segmento': ['regular']*100 + ['vip']*80,
'gasto': np.concatenate([np.random.normal(45, 10, 100),
np.random.normal(52, 12, 80)])
})
vip = df[df['segmento'] == 'vip']['gasto']
regular = df[df['segmento'] == 'regular']['gasto']
# Verificar supuestos
print('Shapiro-Wilk p regular:', shapiro(regular)[1])
print('Shapiro-Wilk p vip:', shapiro(vip)[1])
print('Levene p:', levene(vip, regular)[1])
t_stat, p_value = ttest_ind(vip, regular, equal_var=True) # equal_var según Levene
print(f'p-valor: {p_value:.4f}')
Con p < 0.05 concluimos que el gasto medio del grupo VIP es significativamente distinto.
ANOVA de un factor
Tres variantes de un anuncio generan tasas de conversión (porcentaje). Queremos saber si al menos una versión rinde diferente.
from scipy.stats import f_oneway
a = [3.2, 3.5, 2.8, 4.0, 3.7, 3.1]
b = [4.1, 4.5, 3.9, 4.8, 4.2, 4.6]
c = [2.9, 3.0, 2.7, 3.3, 3.1, 2.8]
stat, p = f_oneway(a, b, c)
print(f'F-statistic: {stat:.2f}, p: {p:.4f}')
Si el resultado es significativo, un análisis post-hoc (Tukey HSD) revelará qué pares difieren.
Prueba chi-cuadrado de independencia
Un equipo de marketing quiere saber si el tipo de dispositivo (móvil, escritorio) está relacionado con la preferencia de categoría (electrónica, ropa, hogar). Datos en tabla de contingencia.
from scipy.stats import chi2_contingency
tabla = [[120, 80, 50], # móvil
[90, 110, 45]] # escritorio
chi2, p, dof, expected = chi2_contingency(tabla)
print(f'Chi-cuadrado: {chi2:.2f}, p-valor: {p:.4f}')
Un p-valor bajo indica que las variables no son independientes; existe asociación.
Implementación en R con funciones base y paquetes
R tiene estas pruebas integradas. Para los mismos ejemplos:
# t-test una muestra
tiempos <- c(284, 310, 295, 320, 298, 275, 302, 315, 290, 300,
305, 288, 312, 297, 304, 286, 309, 291, 314, 296)
t.test(tiempos, mu = 300)
# t-test muestras independientes
regular <- rnorm(100, mean = 45, sd = 10)
vip <- rnorm(80, mean = 52, sd = 12)
t.test(vip, regular, var.equal = TRUE) # si Levene no rechaza igualdad
# ANOVA
version <- rep(c('A', 'B', 'C'), each = 6)
conversion <- c(3.2, 3.5, 2.8, 4.0, 3.7, 3.1,
4.1, 4.5, 3.9, 4.8, 4.2, 4.6,
2.9, 3.0, 2.7, 3.3, 3.1, 2.8)
datos <- data.frame(version, conversion)
res.aov <- aov(conversion ~ version, data = datos)
summary(res.aov)
TukeyHSD(res.aov)
# chi-cuadrado
tabla <- matrix(c(120, 80, 50, 90, 110, 45), nrow = 2, byrow = TRUE)
chisq.test(tabla)
Ambos lenguajes dan resultados equivalentes. Elegirás el que domine tu stack.
Consideraciones prácticas que todo profesional debe dominar
Dominar la sintaxis no basta. Los errores más graves surgen de malas prácticas en la preparación y comunicación.
- Tamaño de muestra. Muestras pequeñas inflan la probabilidad de error tipo II (no detectar un efecto real). Utiliza un análisis de potencia a priori para definir cuántos datos necesitas.
- Supuestos incumplidos. Si la normalidad falla gravemente (distribuciones muy sesgadas), prefiere la mediana y pruebas no paramétricas. La transformación logarítmica o Box-Cox puede normalizar, pero luego la interpretación se hace en escala transformada.
- Pruebas múltiples. Al realizar muchas comparaciones, el riesgo global de un falso positivo se dispara. Corrige con Bonferroni, Holm o control de FDR (false discovery rate).
- p-hacking. Buscar una y otra vez una combinación que dé p < 0.05 sin una hipótesis previa sólida infla la tasa de falsos positivos. Define la hipótesis antes de tocar los datos y no limpies hasta obtener significación.
- Tamaño del efecto. Un p-valor minúsculo no dice cuán grande es la diferencia. Reporta d de Cohen, eta cuadrado o riesgo relativo para que tu audiencia entienda la magnitud práctica.
- Intervalos de confianza. Complementan el p-valor mostrando el rango plausible del parámetro. Un IC del 95% que no incluya el valor nulo refuerza la decisión.
Dedica tiempo a diagnosticar tus datos con gráficos antes de correr una sola línea de código de inferencia. Un boxplot revela más que diez pruebas de normalidad.
Automatización y asistencia inteligente
Cuando manejas cientos de datasets o ejecutas pruebas repetitivas, automatizar el flujo con scripts es obligatorio. Aquí es donde herramientas como HolaGPT entran en juego: puedes describir en lenguaje natural la prueba que necesitas y obtener un borrador de código listo para ejecutar, explicando paso a paso la elección del test. Esto acelera la fase de exploración sin sacrificar rigor, siempre que revises los supuestos manualmente. La combinación de base estadística sólida y asistentes de código inteligentes convierte el análisis en una tarea más fluida y menos propensa a errores de sintaxis.
Conclusión
Realizar una prueba de hipótesis en un conjunto de datos no es apretar un botón, sino un proceso que va desde la pregunta de negocio hasta la interpretación cuidadosa. Python y R te dan todas las herramientas para ejecutar t-test, ANOVA, chi-cuadrado y más, pero el valor real está en saber elegir la prueba correcta, verificar supuestos y comunicar el resultado con contexto.
Cuando te pregunten “¿puedes realizar una prueba de hipótesis en estos datos?”, tu respuesta será un código claro, un p-valor bien interpretado y una recomendación que realmente oriente la decisión. El dato habla; solo necesita un buen estadístico para escuchar.