あなたが持つ人口があるとし確率変数とそれぞれ、ユニットをX I〜ポアソン(λ )。X i > 0であるすべてのユニットについて、n = N − n 0の値を観察します。λの推定値が必要です。
モーメントの方法と条件付き最尤法で答えを得る方法はありますが、EMアルゴリズムを試したかったのです。私は、EMアルゴリズムがあることをもらう -1添字は、アルゴリズムの前の反復からの値を示し、Kはパラメータに対して一定であるが。(私は実際と思いnは括弧内画分には、あるべきN+1;別の時間のための質問を、それは正確でいないようです)。
これを具体的にするために、、∑ x i = 20と仮定します。もちろん、Nとn 0は観測されておらず、λが推定されます。
次の関数を繰り返して、前の反復の最大値を差し込むと、正しい答えに到達します(CML、MOM、および簡単なシミュレーションによって検証されます)。
EmFunc <- function(lambda, lambda0){
-lambda * (10 + 10 / (exp(lambda0) - 1)) + 20 * log(lambda)
}
lambda0 <- 2
lambda <- 1
while(abs(lambda - lambda0) > 0.0001){
lambda0 <- lambda
iter <- optimize(EmFunc, lambda0 = lambda0, c(0,4), maximum = TRUE)
lambda <- iter$maximum
}
> iter
$maximum
[1] 1.593573
$objective
[1] -10.68045
しかし、これは単純な問題です。反復せずに最大化しましょう:
MaxFunc <- function(lambda){
-lambda * (10 + 10 / (exp(lambda) - 1)) + 20 * log(lambda)
}
optimize(MaxFunc, c(0,4), maximum = TRUE)
$maximum
[1] 2.393027
$objective
[1] -8.884968
関数の値は、非反復手順よりも高く、結果は他の方法と一致していません。2番目の手順で異なる(おそらく)不正解が返されるのはなぜですか?