คำนวณโอกาสที่เกิดซ้ำ
ปล่อย พีs( x ) เป็นความน่าจะเป็นที่แน่นอน x ค่านิยม 0 ≤ x ≤ kถูกเลือกในทั้งหมด s ≥ 1 วาดอิสระของ k รายการ (โดยไม่มีการแทนที่) จากประชากรของ n ≥ k > 0สมาชิก. (มาถือกัน)n และ k ได้รับการแก้ไขในช่วงระยะเวลาของการวิเคราะห์ดังนั้นจึงไม่จำเป็นต้องพูดถึงอย่างชัดเจน)
ปล่อย พีs( x ∣ y) เป็นความน่าจะเป็นที่แน่นอน Y ค่าจะถูกเลือกในครั้งแรก s - 1 ดึงแล้ว x ≤ yของพวกเขาถูกเลือกในการดึงครั้งสุดท้าย จากนั้นเนื่องจากมีส่วนย่อยขององค์ประกอบขององค์ประกอบเหล่านั้นและส่วนย่อยขององค์ประกอบที่เหลือจะถูกเลือกแยกออกจากสมาชิกอื่น ๆของประชากร(Yx)xY(n - yk - x)k - xn - y
พีs( x ∣ y) =(Yx) (n - yk - x)(nk).
กฎของความน่าจะเป็นทั้งหมดยืนยัน
พีs( x ) =ΣY= xkพีs( x ∣ y)พีs - 1( y) .
สำหรับมันมั่นใจว่า : นี่คือการกระจายตัวเริ่มต้นs = 1x = k
การคำนวณทั้งหมดที่จำเป็นในการได้รับการกระจายเต็มรูปแบบผ่านซ้ำเป็นs) ไม่เพียงเท่านั้นที่มีความรวดเร็วพอสมควรอัลกอริทึมก็ง่าย ข้อผิดพลาดอย่างหนึ่งที่รอโปรแกรมเมอร์ที่ไม่ระวังคือความน่าจะเป็นเหล่านี้อาจมีขนาดเล็กมากและการคำนวณจุดลอยตัวต่ำกว่าเกณฑ์ การใช้งานต่อไปนี้หลีกเลี่ยงสิ่งนี้โดยการคำนวณค่าของในคอลัมน์ของอาร์เรย์sโอ(k2s )R
เข้าสู่ระบบ(พีs( x ) )1 , 2 , … , s
lp <- function(s, n, k) {
P <- matrix(NA, nrow=k+1, ncol=s, dimnames=list(0:k, 1:s))
P[, 1] <- c(rep(-Inf, k), 0)
for (u in 2:s)
for (i in 0:k) {
q <- P[i:k+1, u-1] + lchoose(i:k, i) + lchoose(n-(i:k), k-i) - lchoose(n, k)
q.0 <- max(q, na.rm=TRUE)
P[i+1, u] <- q.0 + log(sum(exp(q - q.0)))
}
return(P)
}
p <- function(...) zapsmall(exp(lp(...)))
คำตอบของคำถามจะได้รับโดยการให้และ 2 s = 5 , n = 10000 =104k = 100 =102 เอาท์พุทเป็นอาร์เรย์ แต่ส่วนใหญ่ของตัวเลขที่มีขนาดเล็กดังนั้นเราจะเน้นที่มีขนาดเล็กมากxนี่คือสี่แถวแรกที่สอดคล้องกับ :101 × 5xx = 0 , 1 , 2 , 3
p(5, 1e4, 1e2)[1:4, ]
ผลลัพธ์คือ
1 2 3 4 5
0 0 0.3641945 0.9900484 0.9999 0.999999
1 0 0.3715891 0.0099034 0.0001 0.000001
2 0 0.1857756 0.0000481 0.0000 0.000000
3 0 0.0606681 0.0000002 0.0000 0.000000
ค่าของป้ายแถวในขณะที่ค่านิยมของป้ายคอลัมน์ คอลัมน์ 5 แสดงโอกาสที่องค์ประกอบหนึ่งที่ปรากฏในตัวอย่างทั้งห้านั้นมีขนาดเล็ก (ประมาณหนึ่งในล้าน) และไม่มีโอกาสที่องค์ประกอบสองอย่างหรือมากกว่านั้นปรากฏในตัวอย่างทั้งห้าxs
หากคุณต้องการดูว่าโอกาสเหล่านี้มีขนาดเล็กเพียงใดให้ดูที่ลอการิทึมของพวกเขา ฐาน 10 สะดวกและเราไม่ต้องการตัวเลขมาก:
u <- lp(5, 1e4, 1e2)[, 5]
signif(-u[-1] / log(10), 3)
เอาท์พุทบอกเราว่ามีศูนย์อยู่กี่หลังจุดทศนิยม:
1 2 3 4 5 6 7 8 9 10 ... 97 98 99 100
6.0 12.3 18.8 25.5 32.3 39.2 46.2 53.2 60.4 67.6 ... 917.0 933.0 949.0 967.0
ตัวเลขในแถวบนสุดที่มีค่าของxตัวอย่างเช่นโอกาสที่จะพบค่าสามค่าที่ปรากฏขึ้นในตัวอย่างทั้งห้านั้นได้จากการคำนวณโดยให้และแน่นอนมีศูนย์ก่อน ตัวเลขนัยสำคัญแรก ในฐานะที่เป็นเช็คค่าสุดท้ายเป็นรุ่นกลม967.26xexp(u[4])
0.0000000000000000001434419 ...18967.0967.26(10000100)- 4(ซึ่งนับโอกาสที่ตัวอย่างแรกปรากฏขึ้นอีกครั้งในอีกสี่ตัวอย่าง) เท่ากับ10- 967.26.