Calcule las posibilidades recursivamente.
Sea la probabilidad de que exactamente x valores, 0 ≤ x ≤ k , se seleccionen en todos los sorteos independientes s ≥ 1 de k ítems (sin reemplazo) de una población de n ≥ k > 0 miembros. (Mantengamos n y k fijos durante la duración del análisis para que no tengan que mencionarse explícitamente).ps(x)x0≤x≤ks≥1kn≥k>0nk
Sea la probabilidad de que si se seleccionan exactamente los valores y en los primeros sorteos s - 1 , entonces x ≤ y de ellos se seleccionen en el último sorteo. Entonces porque hay ( yps(x∣y)ys−1x≤y subconjuntos deelementosxde esoselementosy, y ( n-y(yx)xy subconjuntos de loselementosk-xrestantesse seleccionan por separado de los otrosn-ymiembros de la población,(n−yk−x)k−xn−y
ps(x∣y)=(yx)(n−yk−x)(nk).
La ley de probabilidad total afirma
ps(x)=∑y=xkps(x∣y)ps−1(y).
Para , es una certeza que x = k : esta es la distribución inicial.s = 1x = k
El cálculo total necesario para obtener la distribución completa a través de repeticiones es O ( k 2 s ) . No solo es razonablemente rápido, el algoritmo es fácil. Un escollo que aguarda al programador incauto es que estas probabilidades pueden volverse extremadamente pequeñas y los cálculos de punto flotante de flujo inferior. La siguiente implementación evita esto al calcular los valores de log ( p s ( x ) ) en las columnas 1 , 2 , ... , s de una matriz.sO ( k2s )R
Iniciar sesión( 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(...)))
La respuesta a la pregunta se obtiene dejando que n = 10 000 = 10 4 , y k = 100 = 10 2 . s = 5 , n = 10000 = 104 4k = 100 = 102 La salida es una matriz de , pero la mayoría de los números son tan pequeños que podemos centrarnos en x muy pequeños . Aquí están las primeras cuatro filas correspondientes a x = 0 , 1 , 2 , 3 :101 × 5Xx = 0 , 1 , 2 , 3
p(5, 1e4, 1e2)[1:4, ]
La salida es
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
Los valores de etiquetan las filas mientras que los valores de s etiquetan las columnas. La columna 5 muestra la posibilidad de que un elemento aparezca en las cinco muestras es minúscula (aproximadamente uno en un millón) y esencialmente no hay posibilidad de que aparezcan dos o más elementos en las cinco muestras.Xs
Si desea ver cuán pequeñas son estas posibilidades, mire sus logaritmos. Base 10 es conveniente y no necesitamos muchos dígitos:
u <- lp(5, 1e4, 1e2)[, 5]
signif(-u[-1] / log(10), 3)
La salida nos dice cuántos ceros hay después del punto decimal:
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
Los números en la fila superior son valores de . Por ejemplo, la posibilidad de que aparezcan exactamente tres valores en las cinco muestras se encuentra mediante la computación , dando 0.000Xexp(u[4])
y de hecho esto tiene 18 ceros antes del primer dígito significativo. Como verificación, el último valor 967.0 es una versión redondeada de 967.26 . ( 100000,0000000000000000001434419 ...18 años967,0967,26(que cuenta las posibilidades de que la primera muestra vuelva a aparecer en las siguientes cuatro muestras) es igual a10-967.26.( 10000100)- 410- 967,26.