Nguồn gốc của khó khăn bạn đang gặp phải trong câu:
Sau đó, sử dụng thuật toán EM, chúng ta có thể tối đa hóa khả năng đăng nhập thứ hai.
Như bạn đã quan sát, bạn không thể. Thay vào đó, những gì bạn tối đa hóa là giá trị mong đợi của khả năng nhật ký thứ hai (được gọi là "khả năng nhật ký dữ liệu hoàn chỉnh"), trong đó giá trị mong đợi được lấy qua . zi
Điều này dẫn đến một quy trình lặp, trong đó tại lặp bạn tính toán các giá trị dự kiến của với các ước tính tham số từ lần lặp ( (đây được gọi là "Bước E ",) sau đó thay thế chúng vào khả năng ghi nhật ký dữ liệu hoàn chỉnh (xem EDIT bên dưới để biết lý do tại sao chúng ta có thể làm điều này trong trường hợp này) và tối đa hóa điều đó liên quan đến các tham số để có được ước tính cho lần lặp hiện tại (" bước M " .)kthzi(k−1)th
Khả năng ghi nhật ký dữ liệu hoàn chỉnh cho Poisson bằng 0 trong trường hợp đơn giản nhất - hai tham số, giả sử và - cho phép đơn giản hóa đáng kể khi đến bước M và điều này mang đến một mức độ nào đó cho biểu mẫu của bạn. Tôi sẽ chỉ cho bạn cách nó hoạt động trong trường hợp đơn giản thông qua một số mã R, để bạn có thể thấy bản chất của nó. Tôi sẽ không đơn giản hóa càng nhiều càng tốt, vì điều đó có thể gây ra sự mất đi sự rõ ràng khi bạn nghĩ về vấn đề của mình:λ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
Trong trường hợp của bạn, ở mỗi bước, bạn sẽ thực hiện hồi quy Poisson có trọng số trong đó các trọng số là 1-zhat
để có được ước tính của và do đó , sau đó tối đa hóa:βλi
∑(Ezilogpi+(1−Ezi)log(1−pi))
đối với vectơ hệ số của ma trận để lấy ước tính của . Các giá trị mong đợi , một lần nữa được tính toán ở mỗi lần lặp.GpiEzi=pi/(pi+(1−pi)exp(−λi))
Nếu bạn muốn làm điều này cho dữ liệu thực, trái ngược với việc chỉ hiểu thuật toán, các gói R đã tồn tại; đây là một ví dụ http://www.ats.ucla.edu/stat/r/dae/zipoisson.htm bằng pscl
thư viện.
EDIT: Tôi nên nhấn mạnh rằng những gì chúng tôi đang làm là tối đa hóa giá trị mong đợi của khả năng ghi nhật ký dữ liệu hoàn chỉnh, KHÔNG tối đa hóa khả năng nhật ký dữ liệu hoàn chỉnh với các giá trị dự kiến của các biến dữ liệu / biến tiềm ẩn bị thiếu. khả năng ghi nhật ký dữ liệu hoàn chỉnh là tuyến tính trong dữ liệu bị thiếu, vì ở đây, hai cách tiếp cận là như nhau, nhưng nếu không, chúng không có.