การ์แวนเป็นอย่างไร
ปัญหาคือเราไม่ทราบว่ามีการนับจำนวนศูนย์เป็นจำนวนเท่าใด เราต้องประมาณค่านี้ ขั้นตอนทางสถิติแบบคลาสสิกสำหรับสถานการณ์เช่นนี้คืออัลกอริทึมการคาดหวังสูงสุด
ตัวอย่างง่ายๆ:
สมมติว่าเรามาจากประชากรที่ไม่รู้จัก (จาก 1,000,000) ด้วยค่าคงตัวปัวซอง 0.2
counts <- rpois(1000000, 0.2)
table(counts)
0 1 2 3 4 5
818501 164042 16281 1111 62 3
แต่เราไม่สังเกตจำนวนศูนย์ แต่เราสังเกตสิ่งนี้:
table <- c("0"=0, table(counts)[2:6])
table
0 1 2 3 4 5
0 164042 16281 1111 62 3
สังเกตความถี่ที่เป็นไปได้
k <- c("0"=0, "1"=1, "2"=2, "3"=3, "4"=4, "5"=5)
ค่าเริ่มต้นของการแจกแจงปัวซง - ลองเดาดู (เรารู้ว่ามันคือ 0.2 ตรงนี้)
lambda <- 1
ความคาดหวัง - การกระจายปัวซอง
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
สูงสุด
lambda_MLE <- (1/sum(table))*(sum(table*k))
lambda_MLE
[1] 0.697252
lambda <- lambda_MLE
การทำซ้ำครั้งที่สอง
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
ทวนซ้ำจนกระทั่งบรรจบกัน:
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
ค่าประมาณประชากรของเราคือ 1003774 และอัตราปัวซองของเราประมาณไว้ที่ 0.1994473 - นี่คือสัดส่วนโดยประมาณของประชากรตัวอย่าง ปัญหาหลักที่คุณจะมีในปัญหาทางชีววิทยาทั่วไปที่คุณกำลังเผชิญอยู่คือสมมติว่าอัตราปัวซองนั้นคงที่
ขออภัยสำหรับการโพสต์ที่ยืดยาว - วิกินี้ไม่เหมาะสำหรับรหัส R