MLE para Bernoulli
Datos: resultados de n lanzamientos de moneda.
La MLE de p es simplemente la media muestral.
Capítulo 7
Cómo estimar parámetros a partir de datos: máxima verosimilitud, máximo a posteriori y error cuadrático medio mínimo.
El estimador que maximiza la probabilidad de los datos
Dados datos , buscamos el parámetro θ que maximice la probabilidad de observar esos datos:
En la práctica maximizamos el log-likelihood:
Datos: resultados de n lanzamientos de moneda.
La MLE de p es simplemente la media muestral.
Datos: n observaciones independientes.
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}")¿Qué hace un buen estimador?
En promedio, el estimador acierta el valor verdadero.
Al aumentar n, el estimador converge al valor real.
Tiene la menor varianza posible entre todos los estimadores insesgados (alcanza la cota de Cramér-Rao).
La MLE es sesgada. El estimador insesgado usa :
Incorporando conocimiento previo
MAP combina la verosimilitud con una distribución a priori usando Bayes:
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.
Un prior es conjugado si la posterior tiene la misma forma que el prior.
Prior: Posterior:
donde s es el número de éxitos.
# 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}")El estimador óptimo bajo L2
El estimador MMSE minimiza :
Es simplemente la esperanza condicional — el valor esperado de θ dados los datos.
Si y , entonces:
# 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}")