La prueba t de Student te permite comparar dos distribuciones numéricas y decidir si son estadísticamente diferentes. Aquí aprendes a programarla en Python usando pandas, NumPy y SciPy, con el dataset Iris como ejemplo práctico para validar hipótesis de manera automatizada.
Esta guía es para ti si estás empezando en estadística aplicada con Python y quieres entender cómo se traducen las fórmulas matemáticas a código reproducible en un notebook.
¿Qué librerías necesitas para automatizar pruebas de hipótesis en Python?
Antes de tocar cualquier fórmula, conviene preparar el entorno. La automatización empieza por importar las herramientas correctas para que el cálculo sea limpio y replicable.
Las librerías base que se usan en el notebook son:
- pandas como
pd para manejar la tabla de datos.
- NumPy como
np para operaciones matemáticas como raíz cuadrada.
- seaborn como
sns por si quieres visualizar.
- scipy.stats como
stats para estadística general.
- Los módulos específicos
f_oneway y ttest_ind desde SciPy, que son los que harán el trabajo pesado en pruebas de hipótesis [02:00].
Después cargas el dataset Iris desde su URL pública, le asignas nombres a las columnas (sepal length, sepal width, petal length, petal width y class) y lo lees con pd.read_csv [03:00].
¿Para qué sirve ttest_ind en SciPy? Es la función que ejecuta una prueba t para muestras independientes. Devuelve el estadístico t y el p-value para decidir si dos grupos tienen medias significativamente distintas.
¿Cómo se calcula el error estándar paso a paso?
La prueba t de Student se construye en bloques. El primero es el error estándar (SE), que mide cuánta variabilidad hay en cada variable respecto a su media [04:30].
La fórmula divide la desviación estándar entre la raíz cuadrada del tamaño de muestra. En código se ve así, aplicado a las dos variables del sépalo:
python
SE_length = iris['sepal_length'].std() / np.sqrt(10)
SE_width = iris['sepal_width'].std() / np.sqrt(10)
Aquí usas .std() de pandas para la desviación estándar y np.sqrt() de NumPy para la raíz cuadrada. La muestra elegida fue 10, pero ese valor depende de tu diseño experimental.
El segundo bloque es el standard error deviation (SED), que combina los dos errores anteriores en un solo valor:
python
SED = np.sqrt(SE_length2 + SE_width2)
No recalculas nada, simplemente reutilizas lo que ya tienes. Y aquí viene lo interesante: este SED es el denominador que vas a usar para obtener el valor t.
¿Cómo interpretas el valor t y el p-value en la prueba de hipótesis?
Con SED listo, calculas el estadístico t. La fórmula es la diferencia de medias entre las dos variables dividida por SED [08:00].
python
t_stat = (iris['sepal_length'].mean() - iris['sepal_width'].mean()) / SED
El resultado en el ejercicio fue 9.43. Te conviene hacer el cálculo en pasos separados en lugar de una sola línea: así detectas errores y entiendes qué está pasando en cada operación.
Luego usas la función importada para obtener el p-value automáticamente:
python
stat, p_value = ttest_ind(iris['sepal_length'], iris['sepal_width'])
El p-value obtenido fue de 3.98e-112, un número extremadamente pequeño [10:30].
¿Qué significa rechazar la hipótesis nula? Significa que los datos muestran una diferencia estadísticamente significativa. La teoría inicial de que ambas distribuciones eran iguales se descarta, y aceptas la hipótesis alternativa.
¿Cuándo aceptar y cuándo rechazar la hipótesis nula?
La regla práctica es comparar el valor absoluto de t contra el valor crítico asociado al p-value:
- Si |t| es mayor que el valor crítico, rechazas la hipótesis nula. Las distribuciones son diferentes.
- Si |t| es menor, aceptas la hipótesis nula. Las distribuciones son similares.
En el caso del Iris, 9.43 es muchísimo mayor que el umbral, así que la conclusión es clara: la distribución de sepal length es muy distinta a la de sepal width [11:30].
¿Por qué dividir el cálculo en SE, SED y t por separado?
Fragmentar te da control. Cada variable intermedia (SE_length, SE_width, SED, t_stat) es revisable y depurable. Si te equivocas escribiendo mean en lugar de min, lo detectas rápido sin tener que reescribir toda la fórmula compuesta.
Esta lógica modular es la misma que vas a aplicar cuando pases a ANOVA y a la correlación de Pearson, los otros dos métodos de validación de hipótesis que vienen en la siguiente práctica. ¿Ya intentaste correr este código con tus propios datos? Cuéntame en los comentarios qué dataset usaste y qué resultado obtuviste.