簡體   English   中英

`optimize()`:指數分布速率的最大似然估計

[英]`optimize()`: Maximum likelihood estimation of rate of an exponential distribution

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

所以這是你的觀察向量

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() 中的錯誤:搜索單變量函數的全局最小值以獲得更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM