Корінь труднощів, які виникають у вас, полягає у реченні:
Тоді, використовуючи алгоритм ЕМ, ми максимізуємо ймовірність другого журналу.
Як ви зауважили, ви не можете. Натомість, ви максимально збільшуєте очікуване значення ймовірності другого журналу (відомого як "ймовірність повного журналу даних"), де очікуване значення приймається за . zi
Це призводить до ітеративної процедури, де при ітерації ви обчислюєте очікувані значення урахуванням оцінок параметра з ітерації ( (це відоме як "Е-крок" ",) замініть їх на повний вірогідність журналу даних (див. EDIT нижче, чому ми можемо це зробити в цьому випадку), і максимізуйте це щодо параметрів, щоб отримати оцінки для поточної ітерації (" М-крок " .)кт годzi( k - 1 )т год
Вірогідність журналу повних даних для нульового завищеного Пуассона в найпростішому випадку - два параметри, скажімо і - дозволяє істотно спростити, коли мова йде про М-крок, і це певною мірою переходить у вашу форму. Я покажу вам, як це працює в простому випадку через якийсь код R, щоб ви могли побачити суть цього. Я не буду максимально спрощувати, оскільки це може призвести до втрати ясності, коли ви думаєте про свою проблему:λp
# Generate data
# Lambda = 1, p(zero) = 0.1
x <- rpois(10000,1)
x[1:1000] <- 0
# Sufficient statistic for the ZIP
sum.x <- sum(x)
# (Poor) starting values for parameter estimates
phat <- 0.5
lhat <- 2.0
zhat <- rep(0,length(x))
for (i in 1:100) {
# zhat[x>0] <- 0 always, so no need to make the assignment at every iteration
zhat[x==0] <- phat/(phat + (1-phat)*exp(-lhat))
lhat <- sum.x/sum(1-zhat) # in effect, removing E(# zeroes due to z=1)
phat <- mean(zhat)
cat("Iteration: ",i, " lhat: ",lhat, " phat: ", phat,"\n")
}
Iteration: 1 lhat: 1.443948 phat: 0.3792712
Iteration: 2 lhat: 1.300164 phat: 0.3106252
Iteration: 3 lhat: 1.225007 phat: 0.268331
...
Iteration: 99 lhat: 0.9883329 phat: 0.09311933
Iteration: 100 lhat: 0.9883194 phat: 0.09310694
У вашому випадку на кожному кроці ви будете робити зважену пуассонову регресію, де ваги повинні 1-zhat
отримувати оцінки і, отже, , а потім максимізувати:βλi
∑(Ezilogpi+(1−Ezi)log(1−pi))
стосовно вектора коефіцієнтів вашої матриці щоб отримати оцінки . Очікувані значення , знову обчислюються при кожній ітерації.p i E z i = p i / ( p i + ( 1 - p i ) exp ( - λ i ) )GpiEzi=pi/(pi+(1−pi)exp(−λi))
Якщо ви хочете зробити це для реальних даних, на відміну від просто розуміння алгоритму, пакети R вже існують; ось приклад http://www.ats.ucla.edu/stat/r/dae/zipoisson.htm за допомогою pscl
бібліотеки.
EDIT: Я повинен підкреслити, що те, що ми робимо, - це максимізація очікуваного значення ймовірності журналу повних даних, НЕ максимізація ймовірності журналу повних даних із очікуваними значеннями відсутніх змінних даних / латентних змінних. Як це трапляється, якщо вірогідність журналу повних даних лінійна у відсутніх даних, як і тут, два підходи однакові, але в іншому випадку вони не є.