Garvan thế nào?
Vấn đề là chúng ta không biết có bao nhiêu số không được quan sát. Chúng tôi phải ước tính điều này. Một thủ tục thống kê cổ điển cho các tình huống như thế này là thuật toán Tối đa hóa Kỳ vọng.
Một ví dụ đơn giản:
Giả sử chúng ta rút ra từ một dân số chưa biết (1.000.000) với hằng số poisson là 0,2.
counts <- rpois(1000000, 0.2)
table(counts)
0 1 2 3 4 5
818501 164042 16281 1111 62 3
Nhưng chúng ta không quan sát số không. Thay vào đó chúng tôi quan sát điều này:
table <- c("0"=0, table(counts)[2:6])
table
0 1 2 3 4 5
0 164042 16281 1111 62 3
Tần số có thể quan sát được
k <- c("0"=0, "1"=1, "2"=2, "3"=3, "4"=4, "5"=5)
Khởi tạo trung bình của phân phối Poisson - chỉ cần đoán (chúng tôi biết đó là 0,2 ở đây).
lambda <- 1
Mong đợi - Phân phối Poisson
P_k <- lambda^k*exp(-lambda)/factorial(k)
P_k
0 1 2 3 4 5
0.367879441 0.367879441 0.183939721 0.061313240 0.015328310 0.003065662
n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
n0
0
105628.2
table[1] <- 105628.2
Tối đa hóa
lambda_MLE <- (1/sum(table))*(sum(table*k))
lambda_MLE
[1] 0.697252
lambda <- lambda_MLE
Lặp lại lần thứ hai
P_k <- lambda^k*exp(-lambda)/factorial(k)
n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
table[1] <- n0
lambda <- (1/sum(table))*(sum(table*k))
population lambda_MLE
[1,] 361517.1 0.5537774
Bây giờ lặp lại cho đến khi hội tụ:
for (i in 1:200) {
P_k <- lambda^k*exp(-lambda)/factorial(k)
n0 <- sum(table[2:6])/(1 - P_k[1]) - sum(table[2:6])
table[1] <- n0
lambda <- (1/sum(table))*(sum(table*k))
}
cbind( population = sum(table), lambda_MLE)
population lambda_MLE
[1,] 1003774 0.1994473
Ước tính dân số của chúng tôi là 1003774 và tỷ lệ poisson của chúng tôi được ước tính là 0,1994473 - đây là tỷ lệ ước tính của dân số được lấy mẫu. Vấn đề chính bạn sẽ gặp phải trong các vấn đề sinh học điển hình mà bạn đang giải quyết là giả định rằng tỷ lệ poisson là một hằng số.
Xin lỗi cho bài viết dài dòng - wiki này không thực sự phù hợp với mã R.