2016-10-09 6 views
1

率の最尤推定Iは観測でexp(λ)分布の結果から、サイズ6のランダムなサンプルを持っている場合は、私は本当にR.`最適化()`:指数分布

でMLE計算を理解することに苦労しています:私は

mean(x) 

を次のようにMLEから計算され、1.111667まし

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

(私は右のこの部分をやっていない、100%確信して)。

しかし、私はRを使用して数値計算をコード化しようとすると、エラーまたは一致しない回答が得られます。

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 
+1

あなたの関数は引数 'lam'を使用しません:あなたはそれを呼び出しても同じ値を返します。おそらくあなたはそれが 'prod(dexp(lam))'であることを望んでいますか?一方、あなたの以前のバージョンは、 'lambda'という名前の引数を使って' dexp'と呼ばれていました。 '?dexp'は、この関数にその名前の引数がないことを示します。 – dash2

答えて

1

をされる取得保管

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

否定的な可能性を最小限に抑える理由はわかりません。しばしば我々は負の値でログの可能性を持っています。近くには不十分であるあなたが唯一の6つの観測を持っていることを考えると、1.11:

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

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

これは、サンプルの平均値から離れすぎていない:

nllik <- function (lambda, obs) -sum(dexp(obs, lambda, log = TRUE)) 

optimizeを使用して、下限と上限を設定しますとにかく推定。


あなたは単変量最適化で動作するように、ここにoptimizeを使用するのはかなり十分です。 optimを使用する場合は、method = "Brent"と設定します。あなたはError in optim(): searching for global minimum for a univariate functionを読むことができます。

+0

私は非常に似た解決策を持っていますが、それはより大まかな見積もりです。 lambda = seq(f0、50、length = n)に対して、関数f