Припустимо, у вас є сукупність з одиниць, кожна з випадковою змінною . Ви спостерігаєте значення для будь-якої одиниці, для якої . Ми хочемо оцінити .
Існують метод моментів та умовно-максимальна ймовірність способів отримання відповіді, але я хотів спробувати алгоритм ЕМ. Я отримую алгоритм ЕМ де індексом вказується значення попередньої ітерації алгоритму, а постійне відносно параметри. (Я фактично вважаю, що у фракції в дужках має бути , але це не здається точним; питання іншим разом).
Щоб зробити це конкретним, припустимо, що , . Звичайно, і не помічені, і слід оцінити.
Коли я повторюю наступну функцію, підключаючи максимальне значення попередньої ітерації, я досягаю правильної відповіді (перевірена 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
Значення функції вище, ніж у неітераційній процедурі, і результат є невідповідним іншим методологіям. Чому друга процедура дає іншу та (я вважаю) неправильну відповідь?