1

我真的很难理解 R 中的 MLE 计算。

如果我从exp(λ)分布中获得大小为 6 的随机样本,则会产生观察结果:

x <- c(1.636, 0.374, 0.534, 3.015, 0.932, 0.179)

我计算出MLE如下

mean(x)

并得到 1.111667(我不是 100% 确定我做这部分是对的)。

但是,当我尝试使用 RI 对数值计算进行编码时,要么得到错误,要么得到不匹配的答案。

lik <- function(lam) prod(dexp(x))   # likelihood function
nlik <- function(lam) -lik(lam)      # negative-likelihood function
optimize(nlik, x)

给我

#$minimum
#[1] 3.014928
#
#$objective
#[1] -0.001268399

本来我有

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
4

1 回答 1

1

所以这是你的观察向量

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,设置下限和上限:

optimize(nllik, lower = 0, upper = 10, obs = x)

#$minimum
#[1] 0.8995461
#
#$objective
#[1] 6.635162

这与样本均值相差不远:1.11,因为您只有 6 个观察值,无论如何都不足以进行密切估计。


optimize当您使用单变量优化时,在这里使用它就足够了。如果要使用optim,请设置method = "Brent". 您可以阅读optim() 中的错误:为单变量函数搜索全局最小值以了解更多信息。

于 2016-10-09T21:42:30.003 回答