Se realiza un ejemplo de estimación de máxima verosimilitud para la función de densidad de la distribución binomial. \[ p(x, θ)=θ^x (1 - θ)^{1-x} \] Entonces, su función de verosimilitud corresponde a: \[ L(x_i, θ) = \prod_{i=1}^{N}p_i(x_i, θ) = \prod_{i=1}^{N}θ^x_i (1 - θ)^{1-x_i} \] \[ log(L(x_i, θ)) = log(θ) \sum_{i=1}^{N} x_i + log(1-θ)(N-\sum_{i=1}^{N} x_i ) \]
# Tamaño de la muestra
N = 200
# Probabilidad
Prob = 0.1
rango = seq(1,200)
# Distribución binomial
distribucion = dbinom(rango, size = N,prob = Prob)
# Función de verosimilitud
log_like <- function(theta, n, x){
return(-log(theta)*sum(x) - log(1-theta)*(n - sum(x)))
}
# Valores para la probabilidad
set.seed(1)
valores = runif(n = N, min = 0, max = 1)
plot(valores, log_like(valores, N, distribucion), main = "Función de log verosimilitud")
MLE_estimates <- optim(fn=log_like, # Función de verosimilitud
par=c(0.1), # Estimación inicial
lower = c(0.1, 0.1), # Límite inferior de los parámetros
upper = c(Inf, Inf), # Límite superior de los parámetros
hessian=TRUE, # Devuelve el Hessiano
method = "L-BFGS-B",
# Entradas personalizadas
n = N,
x = distribucion)
# Examinar estimaciones
MLE_par <- MLE_estimates$par
MLE_SE <- sqrt(diag(solve(MLE_estimates$hessian)))
MLE <- data.table(param = c("Probabilidad"),
estimates = MLE_par,
sd = MLE_SE)
kable(MLE)
| param | estimates | sd |
|---|---|---|
| Probabilidad | 0.1 | 0.0537837 |
graph_prob <- function(x=valores, n=N){
prob = MLE_par
return(log(prob)*sum(x) + log(1-prob)*(n - sum(x)))
}
# Vectorizar
graph_prob <- Vectorize(graph_prob)
# Graficar
p <- ggplot(data = data.frame(prob = 0), mapping = aes(prob = prob)) +
stat_function(fun = graph_prob) +
xlim(0,20) + theme_bw() +xlab("Probabilidad") + ylab("log like")
p