Este es un problema de conteo: hay posibles asignaciones de b cumpleaños para n personas. De ellos, que q ( k ; n , b ) sea el número de tareas para las cuales no hay cumpleaños compartido por más de k personas, pero al menos un cumpleaños es compartido por k personas. La probabilidad que buscamos se puede encontrar sumando q ( k ; n , b ) para los valores apropiados de k y multiplicando el resultado por b - n .bnbnq(k;n,b)kkq(k;n,b)kb−n
Estos recuentos se pueden encontrar exactamente para valores de menores que varios cientos. Sin embargo, no seguirán ninguna fórmula directa: tenemos que considerar los patrones de las formas en que se pueden asignar los cumpleaños . Ilustraré esto en lugar de proporcionar una demostración general. Sea n = 4 (esta es la situación interesante más pequeña). Las posibilidades son:nn=4
- Cada persona tiene un cumpleaños único; el código es {4}.
- Exactamente dos personas comparten un cumpleaños; el código es {2,1}.
- Dos personas tienen un cumpleaños y las otras dos tienen otro; el código es {0,2}.
- Tres personas comparten un cumpleaños; el código es {1,0,1}.
- Cuatro personas comparten un cumpleaños; el código es {0,0,0,1}.
En general, el código es una tupla de recuentos cuyos k th estipula elemento cuántas fechas de nacimiento distintas son compartidos por exactamente k personas. Así, en particular,{a[1],a[2],…}kthk
1a[1]+2a[2]+...+ka[k]+…=n.
Tenga en cuenta, incluso en este caso simple, que hay dos formas de alcanzar el máximo de dos personas por cumpleaños: una con el código y otra con el código { 2 , 1 } .{0,2}{2,1}
Podemos contar directamente el número de posibles asignaciones de cumpleaños correspondientes a cualquier código dado. Este número es producto de tres términos. Uno es un coeficiente multinomial; cuenta el número de formas de dividir personas en un [ 1 ] grupos de 1 , un [ 2 ] grupos de 2 , y así sucesivamente. ¡Debido a que la secuencia de grupos no importa, tenemos que dividir este coeficiente multinomial por un [ 1 ] ! a [ 2 ] ! ⋯na[1]1a[2]2a[1]!a[2]!⋯; su recíproco es el segundo término. Finalmente, alinee los grupos y asígneles un cumpleaños a cada uno: hay candidatos para el primer grupo, b - 1 para el segundo, y así sucesivamente. Estos valores tienen que multiplicarse juntos, formando el tercer término. Es igual al "producto factorial" b ( a [ 1 ] + a [ 2 ] + ⋯ ) donde b ( m ) significa b ( b - 1 ) ⋯ ( b - m + 1bb−1b(a[1]+a[2]+⋯)b(m) .b(b−1)⋯(b−m+1)
Hay una recursión obvia y bastante simple que relaciona el recuento de un patrón con el recuento del patrón { a [ 1 ] , ... , a [ k - 1 ] } . Esto permite el cálculo rápido de los recuentos para valores modestos de n . Específicamente, una [ k ] representa una [ k ] fecha de nacimiento compartida exactamente por k{a[1],…,a[k]}{a[1],…,a[k−1]}na[k]a[k]kpersonas cada uno. Después de esto grupos de k personas han sido extraídos de las n personas, que se pueden hacer en x maneras distintas (por ejemplo), queda por contar el número de maneras de lograr el patrón { un [ 1 ] , ... , a [ k - 1 ] } entre las personas restantes. Multiplicar esto por x da la recursividad.a[k]knx{a[1],…,a[k−1]}x
Dudo que haya una fórmula de forma cerrada para , que se obtiene sumando los recuentos de todas las particiones de n cuyo término máximo es igual a k . Permítanme ofrecer algunos ejemplos:q(k;n,b)nk
Con (cinco cumpleaños posibles) yn = 4 (cuatro personas), obtenemosb=5n=4
q(1)q(2)q(3)q(4)=q(1;4,5)=360+60=120=420=80=5.
De ahí, por ejemplo, la posibilidad de que tres o más personas de cada cuatro compartan el mismo "cumpleaños" (de posibles fechas) es igual a ( 80 + 5 ) / 625 = 0.136 .5(80+5)/625=0.136
Como otro ejemplo, tomar y n = 23 . Estos son los valores de q ( k ; 23 , 365 ) para la k más pequeña (solo para seis sig figs):b=365n=23q(k;23,365)k
k=1:k=2:k=3:k=4:k=5:k=6:k=7:k=8:0.492700.4945920.01253080.0001728441.80449E−61.48722E−89.92255E−115.45195E−13.
Usando esta técnica, podemos calcular fácilmente que hay aproximadamente un 50% de posibilidades de (al menos) una colisión de cumpleaños a tres bandas entre 87 personas, una probabilidad del 50% de una colisión a cuatro bandas entre 187 y una probabilidad del 50% de Una colisión de cinco vías entre 310 personas. Ese último cálculo comienza a tomar unos segundos (en Mathematica, de todos modos) porque el número de particiones a considerar comienza a aumentar. Para sustancialmente mayor necesitamos una aproximación.n
Se obtiene una aproximación por medio de la distribución de Poisson con expectativa , porque podemos ver una asignación de cumpleaños que surge de b variables Poisson casi (pero no del todo) independientes, cada una con expectativa n / b : la variable para cualquier cumpleaños posible dado describe cuántas de las n personas tienen ese cumpleaños. Por lo tanto, la distribución del máximo es aproximadamente F ( k ) b donde F es el CDF de Poisson. Este no es un argumento riguroso, así que hagamos una pequeña prueba. La aproximación para n = 23 , bn/bbn/bnF(k)bFn=23 dab=365
k=1:k=2:k=3:k=4:0.4987830.4968030.0141870.000225115.
Al comparar con lo anterior, puede ver que las probabilidades relativas pueden ser pobres cuando son pequeñas, pero las probabilidades absolutas se aproximan razonablemente a aproximadamente 0.5%. Las pruebas con un amplio rango de y b sugieren que la aproximación generalmente es tan buena.nb
Para concluir, consideremos la pregunta original: tome (el número de observaciones) yb = 1n=10,000 (el número de posibles "estructuras", aproximadamente). La distribución aproximada para el número máximo de "cumpleaños compartidos" esb=1000000
k=1:k=2:k=3:k=4:k>4:00.8475+0.1520+0.0004+<1E−6.
(Este es un cálculo rápido). Claramente, observar una estructura 10 veces de cada 10,000 sería muy significativo. Debido a que y b son grandes, espero que la aproximación funcione bastante bien aquí.nb
Por cierto, como Shane insinuó, las simulaciones pueden proporcionar comprobaciones útiles. Se crea una simulación de Mathematica con una función como
simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];
que luego se itera y resume, como en este ejemplo que ejecuta 10,000 iteraciones de , b = 1n=10000 caso:b=1000000
Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm
Su salida es
2 8503
3 1493
4 4
Estas frecuencias coinciden estrechamente con las predichas por la aproximación de Poisson.