假设您有一个具有单位的总体,每个单位都有一个随机变量。对于任何单位,您都会观察到值。我们想要一个\ lambda的估计。
有矩的方法和有条件的最大似然方法来获得答案,但是我想尝试EM算法。我得到的EM算法是
其中下标表示算法先前迭代的值,相对于参数。(我实际上认为括号中的小数中的应该为,但这似乎并不准确;这是另一个问题)。
为了具体说明,假设,。当然,和是不可观察的,并且将被估计。
当我迭代以下函数时,插入上一个迭代的最大值,就可以得出正确的答案(已通过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
该函数的值高于非迭代过程,并且结果与其他方法不一致。为什么第二步给出一个不同的答案(我认为是错误的答案)?