Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R `优化:指数分布速率的最大似然估计_R_Mle - Fatal编程技术网

R `优化:指数分布速率的最大似然估计

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

我真的很难理解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) -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