Capítulo 7

Estimación

Cómo estimar parámetros a partir de datos: máxima verosimilitud, máximo a posteriori y error cuadrático medio mínimo.

7.1 Máxima Verosimilitud (MLE)

El estimador que maximiza la probabilidad de los datos

Dados datos x1,,xnx_1, \ldots, x_n, buscamos el parámetro θ que maximice la probabilidad de observar esos datos:

θ^MLE=argmaxθi=1nf(xiθ)\hat{\theta}_{\text{MLE}} = \arg\max_\theta \prod_{i=1}^n f(x_i \mid \theta)

En la práctica maximizamos el log-likelihood:

(θ)=i=1nlogf(xiθ)\ell(\theta) = \sum_{i=1}^n \log f(x_i \mid \theta)

MLE para Bernoulli

Datos: resultados de n lanzamientos de moneda.

p^=1ni=1nxi\hat{p} = \frac{1}{n} \sum_{i=1}^n x_i

La MLE de p es simplemente la media muestral.

MLE para Gaussiana

Datos: n observaciones independientes.

μ^=1nxi,σ^2=1n(xiμ^)2\hat{\mu} = \frac{1}{n} \sum x_i, \quad \hat{\sigma}^2 = \frac{1}{n} \sum (x_i - \hat{\mu})^2
python
import numpy as np
from scipy.optimize import minimize
from scipy.stats import norm

# MLE para Gaussiana (forma cerrada)
datos = np.array([1.2, 0.8, 1.5, 0.9, 1.1])
mu_mle = datos.mean()
sigma2_mle = datos.var(ddof=0)  # divide por n, no n-1

print(f"μ_MLE = {mu_mle:.3f}")
print(f"σ²_MLE = {sigma2_mle:.3f}")

# MLE por optimización numérica (útil cuando no hay forma cerrada)
def neg_log_likelihood(params):
    mu, sigma = params
    return -np.sum(norm.logpdf(datos, mu, sigma))

result = minimize(neg_log_likelihood, x0=[0, 1], bounds=[(None, None), (0.01, None)])
print(f"μ_MLE (opt) = {result.x[0]:.3f}")
print(f"σ_MLE (opt) = {result.x[1]:.3f}")

7.2 Propiedades de los Estimadores

¿Qué hace un buen estimador?

Insesgado

E[θ^]=θ\mathbb{E}[\hat{\theta}] = \theta

En promedio, el estimador acierta el valor verdadero.

Consistente

θ^npθ\hat{\theta}_n \xrightarrow{p} \theta

Al aumentar n, el estimador converge al valor real.

Eficiente

Tiene la menor varianza posible entre todos los estimadores insesgados (alcanza la cota de Cramér-Rao).

Corrección por sesgo: varianza muestral

La MLE σ^2=1n(xixˉ)2\hat{\sigma}^2 = \frac{1}{n}\sum(x_i - \bar{x})^2 es sesgada. El estimador insesgado usa n1n-1:

s2=1n1i=1n(xixˉ)2s^2 = \frac{1}{n-1} \sum_{i=1}^n (x_i - \bar{x})^2

7.3 Máximo a Posteriori (MAP)

Incorporando conocimiento previo

MAP combina la verosimilitud con una distribución a priori usando Bayes:

θ^MAP=argmaxθf(xθ)verosimilitudπ(θ)prior\hat{\theta}_{\text{MAP}} = \arg\max_\theta \underbrace{f(\mathbf{x} \mid \theta)}_{\text{verosimilitud}} \cdot \underbrace{\pi(\theta)}_{\text{prior}}

El prior refleja nuestro conocimiento antes de ver los datos. A medida que n crece, la influencia del prior disminuye y MAP converge a MLE.

Prior conjugado

Un prior es conjugado si la posterior tiene la misma forma que el prior.

  • • Bernoulli → Beta
  • • Poisson → Gamma
  • • Gaussiana (μ) → Gaussiana
  • • Gaussiana (σ²) → Inverse Gamma

Ejemplo: Bernoulli-Beta

Prior: pBeta(α,β)p \sim \text{Beta}(\alpha, \beta) Posterior: pxBeta(α+s,β+ns)p \mid \mathbf{x} \sim \text{Beta}(\alpha + s, \beta + n - s)

donde s es el número de éxitos.

python
# MAP para Bernoulli con prior Beta
import numpy as np
from scipy import stats

# Datos: 7 éxitos en 10 ensayos
n, s = 10, 7

# MLE
p_mle = s / n
print(f"MLE: {p_mle:.3f}")

# MAP con prior Beta(2, 2) (creencia previa: p ~ 0.5)
alpha, beta = 2, 2
p_map = (alpha + s - 1) / (alpha + beta + n - 2)
print(f"MAP (Beta(2,2)): {p_map:.3f}")

# MAP con prior Beta(10, 2) (creencia previa fuerte: p ~ 0.83)
alpha2, beta2 = 10, 2
p_map2 = (alpha2 + s - 1) / (alpha2 + beta2 + n - 2)
print(f"MAP (Beta(10,2)): {p_map2:.3f}")

# Posterior completa
posterior = stats.beta(alpha + s, beta + n - s)
print(f"Posterior media: {posterior.mean():.3f}")

7.4 Mínimo Error Cuadrático Medio (MMSE)

El estimador óptimo bajo L2

El estimador MMSE minimiza E[(θ^θ)2]\mathbb{E}[(\hat{\theta} - \theta)^2]:

θ^MMSE=E[θx]\hat{\theta}_{\text{MMSE}} = \mathbb{E}[\theta \mid \mathbf{x}]

Es simplemente la esperanza condicional — el valor esperado de θ dados los datos.

Relación con MAP y MLE

  • MLE: maximiza verosimilitud
  • MAP: maximiza posterior (moda)
  • MMSE: media de la posterior

Caso Gaussiano

Si XθN(θ,σ2)X \mid \theta \sim N(\theta, \sigma^2) y θN(μ0,τ2)\theta \sim N(\mu_0, \tau^2), entonces:

E[θx]=τ2xˉ/σ2+μ0/τ21/σ2+1/τ2\mathbb{E}[\theta \mid \mathbf{x}] = \frac{\tau^2 \bar{x} / \sigma^2 + \mu_0 / \tau^2}{1/\sigma^2 + 1/\tau^2}
python
# MMSE = posterior mean para Gaussiana-Gaussiana
import numpy as np

# Prior: θ ~ N(0, 1)
mu0, tau2 = 0, 1
# Verosimilitud: X|θ ~ N(θ, 0.5)
sigma2 = 0.5

# Datos
datos = np.array([0.8, 1.2, 0.5])
x_bar = datos.mean()
n = len(datos)

# MMSE = posterior mean
precision_prior = 1 / tau2
precision_lik = n / sigma2
posterior_precision = precision_prior + precision_lik
mmse = (mu0 * precision_prior + x_bar * n / sigma2) / posterior_precision

print(f"Media muestral: {x_bar:.3f}")
print(f"MMSE: {mmse:.3f}")
print(f"MLE: {x_bar:.3f}")  # MLE = media muestral para μ

# Con más datos, MMSE se acerca a MLE
datos2 = np.random.randn(100) * 0.5 + 0.8
print(f"n=100, MLE: {datos2.mean():.3f}")
print(f"n=100, MMSE: {(mu0*precision_prior + datos2.mean()*100/sigma2)/(precision_prior + 100/sigma2):.3f}")