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 discreto

pX,Y(x,y)=P(X=x,Y=y)p_{X,Y}(x,y) = P(X = x, Y = y)

xypX,Y(x,y)=1\sum_x \sum_y p_{X,Y}(x,y) = 1

Caso continuo

fX,Y(x,y)0f_{X,Y}(x,y) \ge 0

fX,Y(x,y)dxdy=1\iint f_{X,Y}(x,y) \, dx \, dy = 1

4.2 Distribuciones Marginales

Recuperando lo individual de lo conjunto

Marginal discreta

pX(x)=ypX,Y(x,y)p_X(x) = \sum_y p_{X,Y}(x,y)

Sumamos sobre la otra variable para “marginalizar”.

Marginal continua

fX(x)=fX,Y(x,y)dyf_X(x) = \int_{-\infty}^{\infty} f_{X,Y}(x,y) \, dy

Integramos sobre la otra variable.

python
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:

Cov(X,Y)=E[(XμX)(YμY)]=E[XY]μXμY\text{Cov}(X, Y) = \mathbb{E}[(X - \mu_X)(Y - \mu_Y)] = \mathbb{E}[XY] - \mu_X \mu_Y

El coeficiente de correlación normaliza la covarianza:

ρX,Y=Cov(X,Y)σXσY[1,1]\rho_{X,Y} = \frac{\text{Cov}(X, Y)}{\sigma_X \sigma_Y} \in [-1, 1]

Visualización interactiva

Ajusta la correlación ρ entre X e Y. Genera 300 muestras en tiempo real.

XYρ = 0.70

Cálculo en Python

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 X=(X1,,Xd)T\mathbf{X} = (X_1, \ldots, X_d)^T tiene:

  • Vector de medias: μ=E[X]\boldsymbol{\mu} = \mathbb{E}[\mathbf{X}]
  • Matriz de covarianza: Σ=E[(Xμ)(Xμ)T]\Sigma = \mathbb{E}[(\mathbf{X} - \boldsymbol{\mu})(\mathbf{X} - \boldsymbol{\mu})^T]
Σ=(Var(X1)Cov(X1,X2)Cov(X2,X1)Var(X2))\Sigma = \begin{pmatrix} \text{Var}(X_1) & \text{Cov}(X_1, X_2) & \cdots \\ \text{Cov}(X_2, X_1) & \text{Var}(X_2) & \cdots \\ \vdots & \vdots & \ddots \end{pmatrix}

4.5 Gaussiana Multidimensional

La generalización natural

fX(x)=1(2π)d/2Σ1/2exp ⁣(12(xμ)TΣ1(xμ))f_{\mathbf{X}}(\mathbf{x}) = \frac{1}{(2\pi)^{d/2} |\Sigma|^{1/2}} \exp\!\left(-\frac{1}{2} (\mathbf{x} - \boldsymbol{\mu})^T \Sigma^{-1} (\mathbf{x} - \boldsymbol{\mu})\right)

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.

python
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

  1. Centrar los datos (restar media)
  2. Calcular matriz de covarianza Σ
  3. Eigendecomposición: Σ=QΛQT\Sigma = Q \Lambda Q^T
  4. Seleccionar los k eigenvectores principales
  5. Proyectar los datos: Z=XQkZ = X Q_k

¿Cuántas componentes?

La varianza explicada por cada componente es λi/λj\lambda_i / \sum \lambda_j. Se suele elegir k tal que se retenga ≥ 90-95% de la varianza.

python
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 Z=X+YZ = X + Y se obtiene mediante convolución:

fZ(z)=fX(x)fY(zx)dx=(fXfY)(z)f_Z(z) = \int_{-\infty}^\infty f_X(x) f_Y(z - x) \, dx = (f_X * f_Y)(z)

Suma de Gaussianas

Si XN(μ1,σ12)X \sim N(\mu_1, \sigma_1^2) y YN(μ2,σ22)Y \sim N(\mu_2, \sigma_2^2), entonces X+YN(μ1+μ2,σ12+σ22)X + Y \sim N(\mu_1 + \mu_2, \sigma_1^2 + \sigma_2^2).

Suma de Poisson

Si XPoisson(λ1)X \sim \text{Poisson}(\lambda_1) y YPoisson(λ2)Y \sim \text{Poisson}(\lambda_2), entonces X+YPoisson(λ1+λ2)X + Y \sim \text{Poisson}(\lambda_1 + \lambda_2).