Supponiamo di avere una popolazione con unità, ciascuna con una variabile casuale X i ∼ Poisson ( λ ) . Si osservano n = N - n 0 valori per qualsiasi unità per la quale X i > 0 . Vogliamo una stima di λ .
Esistono metodi di momenti e modi condizionati di massima probabilità di ottenere la risposta, ma volevo provare l'algoritmo EM. Ottengo che l'algoritmo EM sia dove ilsimbolo-1indica il valore della precedente iterazione dell'algoritmo eKè costante rispetto ai parametri. (In realtà penso chennella frazione tra parentesi dovrebbe esseren+1, ma ciò non sembra accurato; una domanda per un'altra volta).
Per rendere concreto questo, supponiamo che , ∑ x i = 20 . Naturalmente, N e n 0 sono inosservati e λ deve essere stimato.
Quando eseguo l'iterazione della seguente funzione, inserendo il valore massimo dell'iterazione precedente, raggiungo la risposta corretta (verificata da CML, MOM e una semplice simulazione):
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
Ma questo è un problema semplice; massimizziamo senza iterare:
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
Il valore della funzione è maggiore rispetto alla procedura non iterativa e il risultato non è coerente con le altre metodologie. Perché la seconda procedura fornisce una risposta diversa (presumo) errata?