使用MLE方法估计指数分布的lambda

时间:2019-09-15 19:58:45

标签: r mle

我正在尝试使用最大似然估计方法来估计lambda。

这是我正在使用的代码:

set.seed(0)
x=rexp(100,10)
plot(x)
fn <- function(lambda){
   length(x)*log(lambda)-lambda*sum(x)
 }
plot(fn)
optim(lambda, fn) 
  

optim(lambda,fn)中的错误:找不到对象'lambda'nlm(fn,lambda)   nlm(fn,lambda)中的错误:找不到对象“ lambda”

很明显,我的问题是错误,我不确定如何解决。 谁能告诉我如何解决这个问题,以便我可以进行估算或推荐更好的方法?

2 个答案:

答案 0 :(得分:2)

当然。因此,optimize函数就是这种情况

# Build Data
set.seed(0)
x=rexp(100,10)

稍微修改对数似然方程(仍然在数值上等效):

log_like_lambda <- function(lambda, x){
  length(x) * log(lambda) - lambda*length(x)*mean(x)
}

然后我们可以使用优化函数来找到最大值。

optimize(f = log_like_lambda, x, interval = c(1,15), maximum = TRUE)

从假数据中输出预期的最大值

$maximum
[1] 9.688527

$objective
[1] 127.0944

在旁边:

请注意,绘制对数可能性以确保您正在优化自己认为正在优化的内容也很有帮助:

log_like <- log_like_lambda(1:50)
plot(log_like)

log-like-exp-func

答案 1 :(得分:2)

这里有几个问题:

  1. 第一个参数应为数字矢量(在这种情况下,长度为1)
  2. optim() 最小化,因此您需要control=list(fnscale=-1))或将功能重新定义为负对数可能性
optim(1,fn,control=list(fnscale=-1))

可行,尽管它给出警告,提示您应使用method="Brent"

您可能要考虑fitdistr()包中的MASS函数(因为MLE适合各种发行版),或mle2()包中的bbmle函数(对于一般的MLE,包括这种情况,例如mle2(x ~ dpois(lambda), data=data.frame(x), start=list(lambda=1))

相关问题