Fundamentos de Análisis Estadístico
Introduce los conceptos de estadística descriptiva e inferencial y aprende a realizar pruebas de hipótesis con SciPy para validar tus resultados y extraer conclusiones significativas de los datos biológicos.
La estadística es la ciencia que nos permite extraer conclusiones significativas a partir de los datos, cuantificando la incertidumbre de esas conclusiones. En el análisis de datos biológicos, es la herramienta que da rigor a nuestras observaciones y nos permite separar la señal real del ruido aleatorio. Distinguimos entre dos ramas principales:
- Estadística Descriptiva: Se enfoca en resumir y describir las características de un conjunto de datos (una muestra). Medidas como la media (promedio), mediana (valor central), desviación estándar (dispersión), mínimo y máximo son ejemplos de estadística descriptiva. Nos dice "qué aspecto tienen nuestros datos".
- Estadística Inferencial: Va un paso más allá. Utiliza los datos de una muestra para hacer inferencias, generalizaciones o conclusiones sobre la población total de la que se extrajo la muestra. Su objetivo es responder a preguntas como "¿Este efecto que veo en mi muestra es real y aplicable a todos los casos, o podría ser solo producto del azar?". Las pruebas de hipótesis son un pilar de esta rama.
Una prueba de hipótesis es un procedimiento estadístico formal para decidir si hay suficiente evidencia en una muestra de datos para inferir que una cierta condición es verdadera para toda la población. Por ejemplo: ¿Un nuevo fungicida (tratamiento) reduce realmente el tamaño de las lesiones en las plantas en comparación con no hacer nada (control)?
El proceso involucra dos hipótesis:
- Hipótesis Nula (H₀): Postula que no hay efecto o no hay diferencia. En nuestro ejemplo: "No hay diferencia en el tamaño medio de las lesiones entre el grupo de control y el grupo de tratamiento".
- Hipótesis Alternativa (H₁): Postula que sí hay un efecto. "El tamaño medio de las lesiones en el grupo de tratamiento es diferente (o menor) que en el grupo de control".
La biblioteca SciPy, a través de su módulo stats, nos proporciona un arsenal de funciones para realizar estas pruebas. Una de las más comunes es la prueba t de Student, que se utiliza para comparar las medias de dos grupos. El resultado clave de esta prueba es el valor p (p-value).
Interpretación del valor p: El valor p es la probabilidad de observar la diferencia que hemos medido (o una diferencia aún más extrema) si la hipótesis nula fuera cierta (es decir, si el tratamiento no tuviera ningún efecto real).
Regla simple del valor p: Si el valor p es muy pequeño (típicamente, menor que un umbral llamado alfa, que suele ser 0.05), significa que es muy poco probable que la diferencia que observamos se deba al azar. Por lo tanto, rechazamos la hipótesis nula y concluimos que la diferencia es estadísticamente significativa.
# Nota: Este código está listo para ser copiado y ejecutado en un notebook de Google Colab.
# Importamos el módulo 'stats' de la biblioteca SciPy, que contiene las funciones estadísticas.
from scipy import stats
# Importamos NumPy para crear y manejar nuestros datos de forma eficiente.
import numpy as np
# --- Preparación de Datos ---
# Creamos datos de muestra simulados para dos grupos.
# Imaginemos que medimos el porcentaje de área foliar afectada por una enfermedad.
# grupo_control: plantas sin tratamiento (placebo o nada).
# grupo_tratamiento: plantas a las que se les aplicó un nuevo fungicida.
# Usamos np.random.normal para generar datos realistas con algo de variabilidad.
np.random.seed(42) # Fijamos la semilla para que los resultados sean reproducibles.
grupo_control = np.random.normal(loc=16, scale=1.5, size=30)
grupo_tratamiento = np.random.normal(loc=13.5, scale=1.8, size=30)
# --- Estadística Descriptiva Rápida ---
print(f"Media del grupo de control: {np.mean(grupo_control):.2f}%")
print(f"Media del grupo de tratamiento: {np.mean(grupo_tratamiento):.2f}%")
print("---")
# Vemos que las medias son diferentes, pero ¿es esta diferencia 'real' o por azar?
# --- Estadística Inferencial: Prueba t de Student ---
# Realizamos una prueba t para dos muestras independientes (los grupos no están relacionados).
# H₀: Las medias de ambos grupos son iguales.
# H₁: Las medias de ambos grupos son diferentes.
# La función devuelve dos valores:
# 1. El estadístico t: una medida de la diferencia entre las medias en relación a la varianza.
# 2. El valor p: la probabilidad de observar esta diferencia si H₀ fuera cierta.
estadistico_t, valor_p = stats.ttest_ind(a=grupo_control, b=grupo_tratamiento, equal_var=False) # Welch's t-test
# Imprimimos los resultados de la prueba.
print(f"Estadístico T: {estadistico_t:.4f}")
# >> Salida: Estadístico T: 6.0478
print(f"Valor P: {valor_p:.4f}") # Lo mostramos con más decimales, ya que puede ser muy pequeño.
# >> Salida: Valor P: 0.0000
# --- Toma de Decisión ---
# Establecemos nuestro umbral de significancia (alfa), el estándar es 0.05.
alpha = 0.05
# Comparamos el valor p con nuestro umbral para tomar una decisión.
if valor_p < alpha:
# Si el valor p es menor, la probabilidad de que nuestra observación sea por azar es muy baja.
# Por lo tanto, rechazamos la "hipótesis nula" (que dice que no hay diferencia).
print(f"Conclusión: Dado que p ({valor_p:.4f}) < alpha (0.05), la diferencia es ESTADÍSTICAMENTE SIGNIFICATIVA.")
print("Hay evidencia para sugerir que el tratamiento tiene un efecto real en la reducción de la enfermedad.")
else:
# Si el valor p es mayor, no tenemos suficiente evidencia para descartar que la diferencia sea por azar.
print(f"Conclusión: Dado que p ({valor_p:.4f}) >= alpha (0.05), la diferencia NO es estadísticamente significativa.")
print("No podemos concluir que el tratamiento tenga un efecto real.")
# >> Salida:
# Media del grupo de control: 15.93%
# Media del grupo de tratamiento: 13.51%
# ---
# Estadístico T: 6.0478
# Valor P: 0.0000
# Conclusión: Dado que p (0.0000) < alpha (0.05), la diferencia es ESTADÍSTICAMENTE SIGNIFICATIVA.
# Hay evidencia para sugerir que el tratamiento tiene un efecto real en la reducción de la enfermedad.