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.

Prueba de hipótesis en conjuntos de datos: guía completa con Python y R

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.

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.

Pruebas para variables categóricas

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.

  1. Comprende el problema de negocio. ¿Qué decisión tomarás con el resultado? Define una pregunta precisa.
  2. Formula H₀ y H₁. Por ejemplo: H₀: μ_A - μ_B = 0; H₁: μ_A ≠ μ_B (bilateral) o μ_A > μ_B (unilateral).
  3. 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.
  4. Verifica los supuestos. Normalidad (gráfico Q-Q, Shapiro-Wilk), homocedasticidad (Levene, Bartlett). Determinarás si usar una paramétrica o no paramétrica.
  5. Selecciona la prueba estadística. Con base en los pasos anteriores y el tipo de datos.
  6. 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.
  7. Compara p-valor con α. Si p ≤ α, rechazas H₀. Si p > α, no puedes rechazarla (que no es lo mismo que aceptar H₀).
  8. 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.

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.