Angenommen, Sie haben eine Population mit Einheiten mit jeweils einer Zufallsvariablen . Sie beobachten Werte für jede Einheit, für die . Wir wollen eine Schätzung von .
Es gibt Methoden für Momente und bedingte Möglichkeiten mit maximaler Wahrscheinlichkeit, um die Antwort zu erhalten, aber ich wollte den EM-Algorithmus ausprobieren. Ich erhalte den EM-Algorithmus als wobei der Index den Wert aus der vorherigen Iteration des Algorithmus angibt und in Bezug auf konstant ist Die Parameter. (Ich denke tatsächlich, dass das in dem Bruch in Klammern , aber das scheint nicht genau zu sein; eine Frage für ein anderes Mal).
Um dies konkret zu machen, nehmen wir an, dass , . Natürlich werden und nicht beobachtet und ist zu schätzen.
Wenn ich die folgende Funktion iteriere und den Maximalwert der vorherigen Iteration einfüge, erreiche ich die richtige Antwort (überprüft durch CML, MOM und eine einfache Simulation):
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
Dies ist jedoch ein einfaches Problem. Lassen Sie uns einfach maximieren, ohne zu iterieren:
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
Der Wert der Funktion ist höher als bei der nicht iterativen Prozedur und das Ergebnis stimmt nicht mit den anderen Methoden überein. Warum gibt das zweite Verfahren eine andere und (ich nehme an) falsche Antwort?
quelle