Capítulo 4
Distribuciones Conjuntas
Cuando trabajamos con múltiples variables: distribuciones conjuntas, correlación, PCA y Gaussianas multidimensionales.
4.1 Distribución Conjunta
P(X = x, Y = y)
La distribución conjunta describe el comportamiento simultáneo de dos o más variables.
Caso continuo
4.2 Distribuciones Marginales
Recuperando lo individual de lo conjunto
Marginal discreta
Sumamos sobre la otra variable para “marginalizar”.
Marginal continua
Integramos sobre la otra variable.
import numpy as np
# Tabla de probabilidad conjunta: P(X=x, Y=y)
# X, Y ∈ {0, 1}
joint = np.array([[0.2, 0.3],
[0.1, 0.4]])
# Marginal: sumar sobre filas (Y) y columnas (X)
p_X = joint.sum(axis=1) # [0.5, 0.5]
p_Y = joint.sum(axis=0) # [0.3, 0.7]
print("P(X=0)=", p_X[0], "P(X=1)=", p_X[1])
print("P(Y=0)=", p_Y[0], "P(Y=1)=", p_Y[1])4.3 Covarianza y Correlación
¿Cómo se relacionan dos variables?
La covarianza mide la dirección de la relación lineal:
El coeficiente de correlación normaliza la covarianza:
Visualización interactiva
Ajusta la correlación ρ entre X e Y. Genera 300 muestras en tiempo real.
Cálculo en Python
import numpy as np
# Datos: dos variables
X = np.array([1, 2, 3, 4, 5])
Y = np.array([2, 4, 5, 4, 6])
# Covarianza
cov = np.cov(X, Y, ddof=0)[0, 1]
# Correlación
corr = np.corrcoef(X, Y)[0, 1]
print(f"Covarianza: {cov:.3f}")
print(f"Correlación: {corr:.3f}")
# Interpretación
if abs(corr) > 0.8:
print("Correlación fuerte")
elif abs(corr) > 0.5:
print("Correlación moderada")
else:
print("Correlación débil")ρ = 1
Relación lineal perfecta positiva
ρ = 0
Sin relación lineal
ρ = -1
Relación lineal perfecta negativa
Independencia
ρ = 0, pero ρ=0 no implica independencia
4.4 Vectores Aleatorios y Matriz de Covarianza
Generalización a d dimensiones
Un vector aleatorio tiene:
- Vector de medias:
- Matriz de covarianza:
4.5 Gaussiana Multidimensional
La generalización natural
La distribución Gaussiana multivariada es la piedra angular de muchos métodos en data science: regresión lineal, análisis discriminante, filtros de Kalman, entre otros.
import numpy as np
from scipy.stats import multivariate_normal
# Gaussiana 2D
mu = [0, 0]
sigma = [[2, 0.8],
[0.8, 1]]
# Evaluar PDF en un punto
pdf_val = multivariate_normal.pdf([0, 0], mean=mu, cov=sigma)
print(f"PDF en (0,0): {pdf_val:.4f}")
# Muestras
samples = multivariate_normal.rvs(mean=mu, cov=sigma, size=1000)
print(f"Media empírica: {samples.mean(axis=0)}")
# Propiedad: combinación lineal
# Si X ~ N(mu, Sigma), entonces AX + b ~ N(A mu + b, A Sigma A^T)
A = np.array([[1, 0], [1, 1]])
b = np.array([0, 0])
mu_transformado = A @ mu + b
sigma_transformado = A @ sigma @ A.T
print(f"Sigma transformada:
{sigma_transformado}")4.6 Análisis de Componentes Principales (PCA)
Reducción de dimensionalidad
PCA encuentra las direcciones de máxima varianza en los datos proyectándolos sobre los eigenvectores de la matriz de covarianza.
El algoritmo
- Centrar los datos (restar media)
- Calcular matriz de covarianza Σ
- Eigendecomposición:
- Seleccionar los k eigenvectores principales
- Proyectar los datos:
¿Cuántas componentes?
La varianza explicada por cada componente es . Se suele elegir k tal que se retenga ≥ 90-95% de la varianza.
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# Datos sintéticos
np.random.seed(42)
X = np.random.randn(100, 5)
# PCA
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)
print(f"Varianza explicada: {pca.explained_variance_ratio_}")
print(f"Varianza total retenida: {pca.explained_variance_ratio_.sum():.3f}")
# Scree plot
plt.bar(range(1, 6), pca.explained_variance_ratio_)
plt.title("Varianza explicada por componente")
plt.show()4.7 Suma de Variables Aleatorias
Convolución y distribución de la suma
La distribución de se obtiene mediante convolución:
Suma de Gaussianas
Si y , entonces .
Suma de Poisson
Si y , entonces .