Se tiene la siguiente distribución geometrica \[ f(x) = p(1-p)^{x-1} \] La función de verosimilitud está dada por: \[ L(p) = p(1-p)^{x_{1} - 1}p(1-p)^{x_{2} - 1}p(1-p)^{x_{3} - 1}p(1-p)^{x_{4} - 1}...p(1-p)^{x_{n} - 1} \]
Es decir \[ L(p) = p^{n}(1-p)^{\sum_{i = 1}^{n}x_{i}-n} \]
La función de log-verosimilitud es: \[ log(L(p)) = nlog(p) + log(1-p)\sum_{i = 1}^{n} x_{i}-n \]
library(pacman)
p_load(data.table, fixest, lattice, magrittr, ggplot2, kableExtra,dplyr)
N = 250
p = 0.4 # Valor arbitrario
data = rgeom(N, p)
Se debe tener en cuenta que la derivación ya fue realizada más arriba en este documento, por lo tanto queda definirla en una función de R y graficarla
log_like = function(p, x, n){
return(n*log(p)+log(1-p)*sum(x-n))
}
valores = runif(30, 0, 1) # runif genera valores entre 0 y 1
plot(valores, log_like(valores, data, 250), main = "Función de log verosimilitud")
MLE_estimates <- optim(fn=log_like, par=c(0.1), lower = c(0.2, 0.2), upper = c(Inf, Inf), hessian = TRUE, method = "L-BFGS-B", n = 250, x = data)
MLE_par <- MLE_estimates$par
MLE_SE <- sqrt(diag(solve(MLE_estimates$hessian)))
MLE <- data.table(param = c("p"),
estimates = MLE_par,
sd = MLE_SE)
kable(MLE)%>%
kable_styling(full_width = F)
param | estimates | sd |
---|---|---|
p | 0.2 | 0.0033184 |
log_like_graph <- function(x = data, n = N){
p = MLE_par
log_like_g <- n*log(p)+log(1-p)*sum(x-n)
return (log_like_g)
}
log_like_graph <- Vectorize(log_like_graph)
p_graph <- ggplot(data = data.frame(p = 0), mapping = aes(p = p)) +
stat_function(fun = log_like_graph) + xlim(0,1) + theme_bw() + xlab("p") + ylab("Log like")
p_graph
Referencias: 1. Seshadri, H. (s. f.). Maximum Likelihood Estimation (MLE) Analysis for various Probability Distributions. Project Rhea. Recuperado 8 de junio de 2022, de https://www.projectrhea.org/rhea/index.php/Maximum_Likelihood_Estimation_Analysis_for_various_Probability_Distributions