Tính toán các cơ hội đệ quy.
Đặt là xác suất chính xác cho các giá trị , , được chọn trong tất cả rút độc lập của mục (không thay thế) từ dân số thành viên . (Hãy giữ và cố định trong suốt thời gian phân tích để chúng không phải được đề cập rõ ràng.)x 0 ≤ x ≤ k s ≥ 1 k n ≥ k > 0 n kps(x)x0≤x≤ks≥1kn≥k>0nk
Đặt là xác suất nếu các giá trị chính xác được chọn trong lần rút đầu tiên , thì trong số chúng được chọn trong lần rút cuối cùng. Sau đó, vì có các tập hợp của các phần tử của các phần tử đó và các tập hợp con của các phần tử còn lại được chọn riêng biệt khỏi các thành viên khác của dân số,y s - 1 x ≤ yps(x∣y)ys−1x≤y(yx)xy(n−yk−x)k−xn−y
ps(x∣y)=(yx)(n−yk−x)(nk).
Định luật tổng xác suất khẳng định
ps(x)=∑y=xkps(x∣y)ps−1(y).
Với , chắc chắn rằng : đây là phân phối bắt đầu.s=1x=k
Tổng số tính toán cần thiết để có được phân phối đầy đủ thông qua lần lặp lại là . Không chỉ là nhanh chóng hợp lý, thuật toán là dễ dàng. Một cạm bẫy đang chờ đợi lập trình viên bất đắc dĩ là những xác suất này có thể trở thành cực kỳ nhỏ và vượt quá các phép tính dấu phẩy động. Việc triển khai sau đây tránh được điều này bằng cách tính các giá trị của trong các cột của một mảng.sO(k2s)R
log(ps(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(...)))
Câu trả lời cho câu hỏi có được bằng cách cho và . s=5, n=10000=104k=100=102 Đầu ra là một mảng , nhưng hầu hết các số rất nhỏ, chúng tôi có thể tập trung vào rất nhỏ . Dưới đây là bốn hàng đầu tiên tương ứng với :101×5xx=0,1,2,3
p(5, 1e4, 1e2)[1:4, ]
Đầu ra là
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
Giá trị của nhãn các hàng trong khi giá trị của nhãn các cột. Cột 5 cho thấy cơ hội một yếu tố xuất hiện trong tất cả năm mẫu là rất nhỏ (khoảng một trong một triệu) và về cơ bản không có khả năng hai hoặc nhiều yếu tố xuất hiện trong cả năm mẫu.xs
Nếu bạn muốn xem những cơ hội này nhỏ đến mức nào, hãy nhìn vào logarit của chúng. Cơ sở 10 thuận tiện và chúng tôi không cần nhiều chữ số:
u <- lp(5, 1e4, 1e2)[, 5]
signif(-u[-1] / log(10), 3)
Đầu ra cho chúng ta biết có bao nhiêu số 0 sau dấu thập phân:
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
Các số ở hàng trên cùng là giá trị của . Chẳng hạn, cơ hội có chính xác ba giá trị hiển thị trong tất cả năm mẫu được tìm thấy bằng máy tính , đưa ra và thực sự điều này có số không trước chữ số có nghĩa đầu tiên. Khi kiểm tra, giá trị cuối cùng là phiên bản làm tròn của . (tính các cơ hội mà mẫu đầu tiên xuất hiện lại trong bốn mẫu tiếp theo) bằngxexp(u[4])
0.0000000000000000001434419…18967.0967.26(10000100)−410−967.26.