No Paradoxo tradicional do aniversário, a pergunta é "quais são as chances de duas ou mais pessoas em um grupo de pessoas compartilharem um aniversário". Estou preso em um problema que é uma extensão disso.
Em vez de saber a probabilidade de duas pessoas compartilharem um aniversário, preciso estender a pergunta para saber qual é a probabilidade de ou mais pessoas compartilharem um aniversário. Com você pode fazer isso calculando a probabilidade de duas pessoas não compartilharem um aniversário e subtraí-lo de , mas acho que não posso estender essa lógica para números maiores de .
Para complicar ainda mais isso, também preciso de uma solução que funcione para números muito grandes para (milhões) e (milhares).
probability
combinatorics
birthday-paradox
Simon Andrews
fonte
fonte
Respostas:
Esse é um problema de contagem: existem possíveis atribuições de aniversários para pessoas. Dessas, seja o número de atribuições para as quais nenhum aniversário é compartilhado por mais de pessoas, mas pelo menos um aniversário é realmente compartilhado por pessoas. A probabilidade que procuramos pode ser encontrada somando para valores apropriados de e multiplicando o resultado por . b n q ( k ; n , b ) k k q ( k ; n , b ) k b - nbn b n q(k;n,b) k k q(k;n,b) k b−n
Essas contagens podem ser encontradas exatamente para valores de inferiores a várias centenas. No entanto, eles não seguirão nenhuma fórmula direta: precisamos considerar os padrões de maneiras pelas quais os aniversários podem ser atribuídos . Ilustrarei isso em vez de fornecer uma demonstração geral. Seja (esta é a menor situação interessante). As possibilidades são:n = 4n n=4
Geralmente, o código é uma tupla de contagens cujo elemento estipula quantas datas de nascimento distintas são compartilhadas por exatamente pessoas. Assim, em particular,k th k{a[1],a[2],…} kth k
Observe, mesmo neste caso simples, que existem duas maneiras pelas quais é atingido o máximo de duas pessoas por aniversário: uma com o código e outra com o código .{ 2 , 1 }{0,2} {2,1}
Podemos contar diretamente o número possível de atribuições de aniversário correspondentes a qualquer código. Este número é o produto de três termos. Um é um coeficiente multinomial; conta o número de maneiras de particionar pessoas em grupo de , grupo de e assim por diante. Como a sequência de grupos não importa, temos que dividir esse coeficiente multinomial por ; seu recíproco é o segundo termo. Por fim, alinhe os grupos e atribua a cada um aniversário: há candidatos para o primeiro grupo,a [ 1 ] 1 a [ 2 ] 2 a [ 1 ] ! a [ 2 ]n a[1] 1 a[2] 2 b b - 1 b ( a [ 1 ] + a [ 2 ] + ⋯ ) b ( m ) b ( b - 1 ) ⋯ ( b - m + 1 )a[1]!a[2]!⋯ b b−1 para o segundo e assim por diante. Esses valores devem ser multiplicados juntos, formando o terceiro termo. É igual ao "produto fatorial" onde significa .b(a[1]+a[2]+⋯) b(m) b(b−1)⋯(b−m+1)
Existe uma recursão óbvia e bastante simples relacionando a contagem de um padrão à contagem do padrão . Isso permite o cálculo rápido das contagens para valores modestos de . Especificamente, representa as datas de nascimento de compartilhadas por exatamente pessoas cada. Depois que esses grupos de pessoas foram retirados das pessoas, o que pode ser feito de maneiras distintas (digamos), resta contar o número de maneiras de alcançar o padrão{ a [ 1 ] , … , a [ k - 1 ] } n{a[1],…,a[k]} {a[1],…,a[k−1]} n a [ k ] k um [ k ] k n X { um [ 1 ] , ... , um [ k - 1 ] } xa[k] a[k] k a[k] k n x {a[1],…,a[k−1]} entre as pessoas restantes. Multiplicar por fornece a recursão.x
Duvido que exista uma fórmula de forma fechada para , que é obtida somando as contagens para todas as partições de cujo termo máximo é igual a . Deixe-me oferecer alguns exemplos:n kq(k;n,b) n k
Com (cinco possíveis aniversários) (quatro pessoas), obtemosn = 4b=5 n=4
Daí, por exemplo, a chance de três ou mais pessoas em quatro compartilharem o mesmo "aniversário" (em datas possíveis) é igual a .( 80 + 5 ) / 625 = 0,1365 (80+5)/625=0.136
Como outro exemplo, tomar e . Aqui estão os valores de para o menor (até seis sig figs):b=365 n=23 q(k;23,365) k
Usando essa técnica, podemos calcular prontamente que há cerca de 50% de chance de (pelo menos) uma colisão de três anos entre 87 pessoas, 50% de chance de uma colisão de quatro vias entre 187 e 50% de chance de uma colisão de cinco vias entre 310 pessoas. Esse último cálculo começa a demorar alguns segundos (no Mathematica, pelo menos) porque o número de partições a considerar começa a aumentar. Para substancialmente maior , precisamos de uma aproximação.n
Uma aproximação é obtida por meio da distribuição de Poisson com expectativa , porque podemos ver uma atribuição de aniversário como decorrente de variáveis Poisson quase (mas não completamente) independentes, cada uma com expectativa : a variável para qualquer aniversário possível descreve quantas das pessoas têm esse aniversário. A distribuição do máximo é, portanto, aproximadamente onde é o CDF de Poisson. Este não é um argumento rigoroso, então vamos fazer um pequeno teste. A aproximação para , fornecen/b b n/b n F(k)b F n=23 b=365
Comparando com o anterior, você pode ver que as probabilidades relativas podem ser ruins quando são pequenas, mas as probabilidades absolutas são razoavelmente bem aproximadas de cerca de 0,5%. Testar com uma ampla gama de e sugere que a aproximação geralmente é sobre esse bem.n b
Para finalizar, vamos considerar a pergunta original: pegue (o número de observações) (o número possível de "estruturas", aproximadamente). A distribuição aproximada para o número máximo de "aniversários compartilhados" én=10,000 b=1000000
(Este é um cálculo rápido.) Claramente, observar uma estrutura 10 vezes em 10.000 seria altamente significativo. Como e são grandes, espero que a aproximação funcione muito bem aqui.n b
Aliás, como Shane sugeriu, as simulações podem fornecer verificações úteis. Uma simulação do Mathematica é criada com uma função como
simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];
que é iterado e resumido, como neste exemplo, que executa 10.000 iterações do caso , :n=10000 b=1000000
Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm
Sua saída é
Essas frequências concordam estreitamente com as previstas pela aproximação de Poisson.
fonte
Sempre é possível resolver esse problema com uma solução monte-carlo, embora isso esteja longe de ser o mais eficiente. Aqui está um exemplo simples do problema de duas pessoas no R (de uma apresentação que fiz no ano passado ; usei isso como um exemplo de código ineficiente), que pode ser facilmente ajustado para dar conta de mais de 2:
fonte
Esta é uma tentativa de uma solução geral. Pode haver alguns erros, portanto, use com cuidado!
Primeiro alguma notação:
Notas:
O abuso de notação como Está sendo usado de duas maneiras diferentes.P(.)
Por definição, não pode assumir o valor de 1, pois não faz sentido e = 0 pode ser interpretado como significando que ninguém compartilha um aniversário em comum.y y
A probabilidade requerida é dada por:
Agora,
Aqui está a lógica: você precisa da probabilidade de exatamente compartilhar um aniversário.y
Etapa 1: você pode escolher people de .( ny (ny)
Etapa 2: como eles compartilham um aniversário, pode ser um dos 365 dias em um ano. Então, basicamente temos 365 opções que nos dão .(365365)y
Passo 3: Os restantes as pessoas não devem compartilhar um aniversário com os primeiros pessoas ou com o outro. Esse raciocínio nos fornece .y ∏ k = n - y k = 1 ( 1 - kn−y y ∏k=n−yk=1(1−k365)
Você pode verificar se, para = 2, o item anterior se reduz à solução padrão de paradoxo de aniversário.x
fonte