Introducción
En la era del Big Data, la estadística se ha convertido en una herramienta indispensable para extraer conocimiento valioso de grandes volúmenes de información. Python, gracias a su ecosistema de bibliotecas especializadas, se ha posicionado como el lenguaje preferido para el análisis estadístico. En este artículo exploraremos cómo aplicar técnicas estadísticas en Python, desde conceptos básicos hasta casos prácticos avanzados. Si deseas reforzar tus conocimientos en aritmética antes de continuar, te recomendamos visitar esta introducción.
Bibliotecas Esenciales para Estadística en Python
Python ofrece varias bibliotecas poderosas para el análisis estadístico:
- NumPy: Proporciona estructuras de datos eficientes para operaciones numéricas.
- SciPy: Contiene implementaciones de distribuciones estadísticas y tests.
- Pandas: Ideal para manipulación y análisis de datos estructurados.
- StatsModels: Ofrece modelos estadísticos avanzados.
- Matplotlib/Seaborn: Para visualización de datos.
Ejemplo: Cálculo de Estadísticas Descriptivas
import numpy as np
data = np.array([23, 45, 67, 32, 12, 89, 45, 32])
print(f"Media: {np.mean(data)}")
print(f"Desviación estándar: {np.std(data)}")
print(f"Mediana: {np.median(data)}")
Distribuciones de Probabilidad
Python permite trabajar con diversas distribuciones de probabilidad:
Teorema del Límite Central
Dada una población con media $\mu$ y varianza $\sigma^2$, la distribución de las medias muestrales se aproxima a una normal $N(\mu, \sigma^2/n)$ cuando $n \to \infty$.
Demostración:
Sea $X_1, X_2, …, X_n$ una muestra aleatoria. Por propiedades de esperanza y varianza:
$$E\left(\frac{1}{n}\sum X_i\right) = \mu$$
$$Var\left(\frac{1}{n}\sum X_i\right) = \frac{\sigma^2}{n}$$
El resultado sigue del Teorema de Lévy-Lindeberg.
Ejemplo: Simulación del Teorema del Límite Central
import numpy as np
import matplotlib.pyplot as plt
# Simular 1000 muestras de tamaño 30 de una distribución exponencial
means = [np.mean(np.random.exponential(scale=1, size=30)) for _ in range(1000)]
plt.hist(means, bins=30, density=True)
plt.title('Distribución de Medias Muestrales')
plt.show()
Pruebas de Hipótesis
Las pruebas de hipótesis nos permiten tomar decisiones sobre parámetros poblacionales:
Teorema de Neyman-Pearson
Para contrastar $H_0: \theta = \theta_0$ vs $H_1: \theta = \theta_1$, la prueba más potente rechaza $H_0$ cuando el cociente de verosimilitudes $\frac{L(\theta_1)}{L(\theta_0)} > k$, donde $k$ se elige para controlar el nivel de significancia.
Ejercicio Resuelto: Prueba t para una muestra
Problema: Un fabricante afirma que sus bombillas duran 1000 horas. Una muestra de 20 bombillas tiene media 980h con desviación 50h. ¿Contradice esto la afirmación del fabricante? (α=0.05)
Solución:
- Hipótesis: $H_0: \mu = 1000$ vs $H_1: \mu \neq 1000$
- Estadístico: $t = \frac{\bar{x} – \mu_0}{s/\sqrt{n}} = \frac{980-1000}{50/\sqrt{20}} = -1.789$
- Valor crítico: $t_{0.025,19} = \pm 2.093$
- Decisión: No rechazar $H_0$ (|t| < valor crítico)
Implementación en Python:
from scipy import stats
stats.ttest_1samp([980]*20, popmean=1000)
Regresión Lineal
La regresión lineal modela la relación entre variables:
Teorema de Gauss-Markov
Bajo los supuestos clásicos (linealidad, exogeneidad, homocedasticidad y no autocorrelación), los estimadores MCO son MELI (mejores estimadores lineales insesgados).
Demostración:
Sea $\hat{\beta} = (X’X)^{-1}X’y$ el estimador MCO. Es lineal en y, insesgado ($E(\hat{\beta}) = \beta$), y tiene varianza mínima entre todos los estimadores lineales insesgados.
Ejemplo: Regresión Lineal Simple
import statsmodels.api as sm
import numpy as np
# Datos
X = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# Añadir constante
X = sm.add_constant(X)
# Ajustar modelo
model = sm.OLS(y, X).fit()
print(model.summary())
Análisis de Varianza (ANOVA)
ANOVA compara medias entre grupos:
Ejercicio Resuelto: ANOVA de un factor
Problema: Comparar el rendimiento de tres métodos de enseñanza con los siguientes resultados:
Método A: 78, 85, 92
Método B: 65, 70, 68
Método C: 80, 82, 85
Solución:
- Hipótesis: $H_0: \mu_A = \mu_B = \mu_C$ vs $H_1$: Al menos una media difiere
- Calcular suma de cuadrados entre grupos (SSB) y dentro de grupos (SSW)
- Estadístico F: $F = \frac{SSB/(k-1)}{SSW/(N-k)}$
- Comparar con $F_{2,6,0.05} = 5.14$
Implementación en Python:
from scipy import stats
stats.f_oneway([78,85,92], [65,70,68], [80,82,85])
Aplicaciones Prácticas
La estadística en Python tiene numerosas aplicaciones:
- Finanzas: Modelado de riesgos, análisis de series temporales
- Medicina: Ensayos clínicos, análisis epidemiológico
- Marketing: Segmentación de clientes, análisis de campañas
- Deportes: Análisis de rendimiento, scouting de jugadores
Para profundizar en conceptos matemáticos fundamentales, consulta nuestro artículo sobre fundamentos de probabilidad.
Conclusión
En este artículo hemos explorado las principales herramientas estadísticas disponibles en Python, desde estadística descriptiva hasta modelos avanzados como regresión lineal y ANOVA. Hemos demostrado teoremas fundamentales y resuelto ejercicios prácticos que ilustran la aplicación de estos conceptos. Python, con su rico ecosistema de bibliotecas, se consolida como una plataforma ideal para el análisis estadístico moderno, permitiendo implementar desde técnicas básicas hasta modelos complejos de manera eficiente.
Ejercicios Adicionales
Ejercicio 1: Intervalo de Confianza
Una muestra de 50 estudiantes tiene un promedio de altura de 170cm con desviación estándar de 8cm. Construye un intervalo de confianza del 95% para la altura media poblacional.
Solución:
$$IC = \bar{x} \pm z_{\alpha/2}\frac{s}{\sqrt{n}} = 170 \pm 1.96\frac{8}{\sqrt{50}} = [167.78, 172.22]$$
Ejercicio 2: Prueba de Proporciones
En una encuesta, 120 de 400 personas apoyan una medida. ¿Hay evidencia suficiente (α=0.05) para afirmar que menos del 35% de la población apoya la medida?
Solución:
$$z = \frac{\hat{p}-p_0}{\sqrt{p_0(1-p_0)/n}} = \frac{0.3-0.35}{\sqrt{0.35*0.65/400}} = -2.09$$
Valor crítico: -1.645 (rechazamos H₀, hay evidencia)
Ejercicio 3: Correlación
Calcula el coeficiente de correlación entre horas de estudio (X) y calificación (Y):
X: 2,4,6,8,10
Y: 65,80,85,90,95
Solución:
import numpy as np
np.corrcoef([2,4,6,8,10], [65,80,85,90,95])[0,1] # Resultado: 0.981
«`
