R `优化:指数分布速率的最大似然估计
我真的很难理解R中的MLE计算 如果我从R `优化:指数分布速率的最大似然估计,r,mle,R,Mle,我真的很难理解R中的MLE计算 如果我从exp(λ)分布结果中得到一个大小为6的随机样本: x <- c(1.636, 0.374, 0.534, 3.015, 0.932, 0.179) 得到了1.111667(我不能100%肯定我做得对) 但当我试图用R编码数值计算时,我要么得到错误,要么得到不匹配的答案 lik <- function(lam) prod(dexp(x)) # likelihood function nlik <- function(lam) -li
exp(λ)
分布结果中得到一个大小为6的随机样本:
x <- c(1.636, 0.374, 0.534, 3.015, 0.932, 0.179)
得到了1.111667(我不能100%肯定我做得对)
但当我试图用R编码数值计算时,我要么得到错误,要么得到不匹配的答案
lik <- function(lam) prod(dexp(x)) # likelihood function
nlik <- function(lam) -lik(lam) # negative-likelihood function
optimize(nlik, x)
原来我有
lik <-function(lam) prod(dexp(x, lambda=lam)) # likelihood function
nlik <- function(lam) -lik(lam) # negative-likelihood function
optim(par=1, nlik) # minimize nlik with starting parameter value=1
这是你们的观测向量
x <- c(1.636, 0.374, 0.534, 3.015, 0.932, 0.179)
这与样本均值1.11相差不太远,因为您只有6个观察值,不足以进行精确估计
当您使用单变量优化时,在这里使用
optimize
就足够了。如果要使用optim
,请设置method=“Brent”
。您可以阅读更多信息。您的函数不使用其参数lam
:它将返回相同的值,无论您如何调用它。也许您希望它是prod(dexp(lam))
?另一方面,以前的版本名为dexp
,参数名为lambda
<代码>?dexp显示此函数没有同名参数。我有一个非常类似的解决方案,只是它是一个更粗略的估计。我反复应用函数f,优化函数找到速率参数的MLE,平均值是速率的倒数(例如1/0.899=1.112)。因此,样本平均值正好是速率的MLE估计的倒数;由于只有6次观测,因此数值上没有差异。
lik <-function(lam) prod(dexp(x, lambda=lam)) # likelihood function
nlik <- function(lam) -lik(lam) # negative-likelihood function
optim(par=1, nlik) # minimize nlik with starting parameter value=1
#Error in dexp(x, lambda = lam) :
# unused argument (lambda = lam)
#In addition: Warning message:
#In optim(par = 1, nlik) :
# one-dimensional optimization by Nelder-Mead is unreliable:
#use "Brent" or optimize() directly
x <- c(1.636, 0.374, 0.534, 3.015, 0.932, 0.179)
nllik <- function (lambda, obs) -sum(dexp(obs, lambda, log = TRUE))
optimize(nllik, lower = 0, upper = 10, obs = x)
#$minimum
#[1] 0.8995461
#
#$objective
#[1] 6.635162