Rozszerzenie paradoksu urodzinowego na więcej niż 2 osoby


29

W tradycyjnym paradoksie urodzinowym pytanie brzmi: „jakie są szanse, że dwie lub więcej osób w grupie osób będzie miało urodziny”. Utknąłem na problem, który jest przedłużeniem tego.n

Zamiast znać prawdopodobieństwo, że dwie osoby dzielą urodziny, muszę rozszerzyć pytanie, aby wiedzieć, jakie jest prawdopodobieństwo, że lub więcej osób podzieli urodziny. Przy możesz to zrobić, obliczając prawdopodobieństwo, że żadna dwie osoby nie będą dzielić urodzin i odejmie to od , ale nie sądzę, żebym mógł rozszerzyć tę logikę na większą liczbę .xx=21x

Aby to jeszcze bardziej skomplikować, potrzebuję również rozwiązania, które będzie działać dla bardzo dużych liczb dla (milionów) i (tysięcy).xnx


1
Przypuszczam, że to problem bioinformatyki
csgillespie

3
W rzeczywistości jest to problem bioinformatyki, ale ponieważ sprowadza się do tej samej koncepcji, co paradoks urodzinowy, pomyślałem, że uratuję nieistotne szczegóły!
Simon Andrews,

4
Normalnie zgodziłbym się z tobą, ale w tym przypadku specyfika może mieć znaczenie, ponieważ może już istnieć pakiet bioprzewodników, który robi to, o co prosisz.
csgillespie

Jeśli naprawdę chcesz wiedzieć, to jest problem ze znalezieniem wzoru, w którym staram się dokładnie oszacować prawdopodobieństwo danego poziomu wzbogacenia podsekwencji w zestawie większych sekwencji. Mam zatem zestaw podsekwencji z powiązanymi zliczeniami i wiem, ile podsekwencji zaobserwowałem i ile teoretycznie możliwych do zaobserwowania sekwencji jest dostępnych. Jeśli widziałem określoną sekwencję 10 razy na 10 000 obserwacji, muszę wiedzieć, jak prawdopodobne było to przez przypadek.
Simon Andrews,

Prawie osiem lat później opublikowałem odpowiedź na ten problem na stronie stats.stackexchange.com/questions/333471 . Kod nie działa dla dużych jednak ponieważ zajmuje kwadratowego czasu w n . n,n
whuber

Odpowiedzi:


17

Jest to problem liczenia: istnieją ewentualne cesje b urodzin do n osób. Spośród nich niech q ( k ; n , b ) będzie liczbą przydziałów, dla których żadne urodziny nie są dzielone przez więcej niż k osób, ale przynajmniej jedno urodziny jest faktycznie dzielone przez k osób. Prawdopodobieństwo, którego szukamy, można znaleźć, sumując q ( k ; n , b ) dla odpowiednich wartości k i mnożąc wynik przez b - n .bnbnq(k;n,b)kkq(k;n,b)kbn

Liczby te można znaleźć dokładnie dla wartości mniejszych niż kilkaset. Nie będą one jednak zgodne z żadną prostą formułą: musimy wziąć pod uwagę wzorce przydzielania urodzin . Zilustruję to zamiast przedstawienia ogólnej demonstracji. Niech n = 4 (jest to najmniej interesująca sytuacja). Możliwości są następujące:nn=4

  • Każda osoba ma wyjątkowe urodziny; kod to {4}.
  • Dokładnie dwie osoby dzielą urodziny; kod to {2,1}.
  • Dwie osoby mają jedno urodziny, a pozostałe dwie mają inne; kod to {0,2}.
  • Trzy osoby dzielą urodziny; kod to {1,0,1}.
  • Cztery osoby dzielą urodziny; kod to {0,0,0,1}.

Zasadniczo kod jest krotką zliczeń, których k- ty element określa, ile różnych dat urodzenia jest dzielonych przez dokładnie k osób. W szczególności{a[1],a[2],}kthk

1a[1]+2a[2]+...+ka[k]+=n.

Zauważ, nawet w tym prostym przypadku, że istnieją dwa sposoby osiągnięcia maksymalnie dwóch osób na urodziny: jeden z kodem a drugi z kodem { 2 , 1 } .{0,2}{2,1}

Możemy bezpośrednio policzyć liczbę możliwych przypisań urodzin odpowiadających dowolnemu kodowi. Ta liczba jest iloczynem trzech terminów. Jeden to współczynnik wielomianowy; zlicza liczbę sposobów podziału ludzi do a [ 1 ] grupach 1 , [ 2 ] grupach 2 i tak dalej. Ponieważ sekwencja grupami nie ma znaczenia, trzeba podzielić tego wielomianu o współczynnik w [ 1 ] ! a [ 2 ] ! na[1]1a[2]2a[1]!a[2]!; jego wzajemność jest drugim terminem. Na koniec uszereguj grupy i przypisz każdemu z nich urodziny: kandydatów do pierwszej grupy, b - 1 do drugiej i tak dalej. Wartości te należy pomnożyć razem, tworząc trzeci element. Jest równy „iloczynowi czynnikowemu” b (bb1 gdzie b ( m ) oznaczab(b-1)(b-m+1b(a[1]+a[2]+)b(m) .b(b1)(bm+1)

Istnieje oczywista i dość prosta rekurencja odnosząca liczbę dla wzoru do liczby dla każdego wzorca . Po tych [ k{a[1],,a[k]} . Umożliwia to szybkie obliczenie zliczeń dla skromnych wartości n . Konkretnie [ k ] reprezentuje a [ k ] miejsc urodzenia dzielone dokładnie k{a[1],,a[k1]}na[k]a[k]k grup k osób zostało wyciągniętych z n ludzi, co można zrobić na x różnych sposobów (powiedzmy), pozostaje policzyć liczbę sposobów osiągnięcia wzoru { a [ 1 ] , , a [ k - 1 ] } wśród pozostałych osób. Pomnożenie tego przez x daje rekurencję.a[k]knx{a[1],,a[k1]}x

Wątpię, aby istniała formuła zamknięta dla , która jest uzyskiwana przez zsumowanie zliczeń dla wszystkich partycji n, których maksymalny człon wynosi k . Pozwól, że podam kilka przykładów:q(k;n,b)nk

Przy (pięć możliwych urodzin) i n = 4 (cztery osoby), otrzymujemyb=5n=4

q(1)=q(1;4,5)=120q(2)=360+60=420q(3)=80q(4)=5.

Stąd na przykład szansa, że ​​trzy lub więcej osób na cztery ma te same „urodziny” (z możliwych dat) wynosi ( 80 + 5 ) / 625 = 0,136 .5(80+5)/625=0.136

Jako kolejny przykład weź i n = 23 . Oto wartości q ( k ; 23 , 365 ) dla najmniejszego k (tylko do sześciu sig fig):b=365n=23q(k;23,365)k

k=1:0.49270k=2:0.494592k=3:0.0125308k=4:0.000172844k=5:1.80449E6k=6:1.48722E8k=7:9.92255E11k=8:5.45195E13.

Korzystając z tej techniki, możemy łatwo obliczyć, że istnieje około 50% szansy (przynajmniej) na trójstronną kolizję urodzinową wśród 87 osób, 50% szansy na czterokierunkową kolizję wśród 187 osób i 50% szansy na pięciokierunkowa kolizja między 310 osobami. Ostatnie obliczenia zaczynają się kilka sekund (w każdym razie w Mathematica), ponieważ liczba rozważanych partycji zaczyna się powiększać. Dla znacznie większego potrzebujemy przybliżenia.n

Jedno przybliżenie uzyskuje się za pomocą rozkładu Poissona z oczekiwaniem , ponieważ możemy zobaczyć przypisanie urodzin jako wynikające z b prawie (ale nie całkiem) niezależnych zmiennych Poissona, z których każda ma oczekiwanie nn/bb : zmienna dla każdej możliwej urodzin opisuje, ile spośród n osób ma te urodziny. Rozkład maksimum wynosi zatem w przybliżeniu F ( k ) b, gdzie F jest Poissonem CDF. To nie jest rygorystyczny argument, więc zróbmy trochę testów. Przybliżenie dla n = 23 , bn/bnF(k)bFn=23 dajeb=365

k=1:0.498783k=2:0.496803k=3:0.014187k=4:0.000225115.

Porównując z poprzednim, można zauważyć, że względne prawdopodobieństwa mogą być słabe, gdy są małe, ale prawdopodobieństwa absolutne są dość dobrze przybliżone do około 0,5%. Testowanie w wielu i B sugeruje, że przybliżenie to zwykle o dobra.nb

Omotać, rozważmy oryginalne pytanie: wziąć (liczba obserwacji) oraz b = 1n=10,000 (w przybliżeniu liczba możliwych „struktur”). Przybliżony rozkład maksymalnej liczby „wspólnych urodzin” wynosib=1000000

k=1:0k=2:0.8475+k=3:0.1520+k=4:0.0004+k>4:<1E6.

(Jest to szybkie obliczenie.) Oczywiste jest, że obserwowanie jednej struktury 10 razy na 10 000 byłoby bardzo znaczące. Ponieważ zarówno i b są duże, spodziewam się, że aproksymacja będzie działać tutaj całkiem dobrze.nb

Nawiasem mówiąc, jak zasugerował Shane, symulacje mogą zapewnić przydatne kontrole. Symulacja Mathematica jest tworzona z funkcją podobną do

simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];

który jest następnie iterowany i podsumowywany, jak w tym przykładzie, w którym działa 10 000 iteracji z , b = 1n=10000 skrzynek:b=1000000

Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm

Jego wydajność to

2 8503

3 1493

4 4

Częstotliwości te są ściśle zgodne z przewidywanymi przez przybliżenie Poissona.


Cóż za fantastyczna odpowiedź, dziękuję bardzo @whuber.
JKnight

„Jest oczywista i dość prosta rekurencja” - a mianowicie?
Kodiolog,

1
@Kodiologist Wstawiłem krótki opis pomysłu.
whuber

+1, ale gdzie w pierwotnym pytaniu widziałeś, że n = 10000 ib = 1mln? OP wygląda tak, jakby pytał o n = 1mln i k = 10000, przy b nieokreślonym (przypuszczalnie b = 365). W tym momencie to nie ma znaczenia :)
amoeba mówi Przywróć Monikę

1
@amoeba Po całym tym czasie (sześć lat, 1600 odpowiedzi i uważne czytanie dziesiątek tysięcy postów) nie pamiętam, ale najprawdopodobniej źle zinterpretowałem ostatnią linię. W mojej obronie zauważmy, że jeśli przeczytamy ją dosłownie, odpowiedź jest natychmiastowa (po zastosowaniu wersji zasady Pigeonhole): jest pewne, że wśród = milionów ludzi będzie co najmniej jedno urodziny, które będzie dzielone między co najmniej x = tysiące z nich! nx
whuber

2

Zawsze można rozwiązać ten problem za pomocą rozwiązania monte-carlo, chociaż nie jest to najbardziej wydajne. Oto prosty przykład problemu 2 osób w R (z prezentacji, którą przedstawiłem w zeszłym roku ; użyłem tego jako przykładu nieefektywnego kodu), który można łatwo dostosować, aby uwzględnić więcej niż 2:

birthday.paradox <- function(n.people, n.trials) {
    matches <- 0
    for (trial in 1:n.trials) {
        birthdays <- cbind(as.matrix(1:365), rep(0, 365))
        for (person in 1:n.people) {
            day <- sample(1:365, 1, replace = TRUE)
            if (birthdays[birthdays[, 1] == day, 2] == 1) {
                matches <- matches + 1
                break
            }
            birthdays[birthdays[, 1] == day, 2] <- 1
        }
        birthdays <- NULL
    }
    print(paste("Probability of birthday matches = ", matches/n.trials))
}

Nie jestem pewien, czy rozwiązanie wielu typów będzie tutaj działać.

Myślę, że uogólnienie nadal działa tylko dla 2 lub więcej osób dzielących urodziny - tylko że możesz mieć różne podklasy ludzi.
Simon Andrews,

1

To próba ogólnego rozwiązania. Mogą występować błędy, więc używaj go ostrożnie!

Najpierw notacja:

P(x,n)xn

P(y|n) yn

Uwagi:

  1. P(.)

  2. yy

Następnie wymagane prawdopodobieństwo podaje:

P(x,n)=1P(0|n)P(2|n)P(3|n)....P(x1|n)

Teraz,

P(y|n)=(ny)(365365)y k=1k=ny(1k365)

y

Krok 1: Możesz wybrać y ludzie w (ny) sposoby

Krok 2: Ponieważ dzielą urodziny, może to być dowolny z 365 dni w roku. Mamy w zasadzie 365 wyborów, co daje nam(365365)y.

Krok 3: Pozostałe n-y ludzie nie powinni dzielić urodzin z pierwszym yludzie lub ze sobą. Takie rozumowanie daje namk=1k=ny(1k365).

You can check that for x = 2 the above collapses to the standard birthday paradox solution.


Will this solution suffer from the curse of dimensionality? If instead of n=365, n=10^6 is this solution still feasible?
csgillespie

Some approximations may have to be used to deal with high dimensions. Perhaps, use Stirling's approximation for factorials in the binomial coefficient. To deal with the product terms you could take logs and compute the sums instead of the products and then take the anti-log of the sum.

There are also several other forms of approximations possible using for example the Taylor series expansion for the exponential function. See the wiki page for these approximations: en.wikipedia.org/wiki/Birthday_problem#Approximations

Suppose y=2, n=4, and there are just two birthdays. Your formula, adapted by replacing 365 by 2, seems to say the probability that exactly 2 people share a birthday is Comb(4,2)*(2/2)^2*(1-1/2)*(1-2/2) = 0. (In fact, it's easy to see--by brute force enumeration if you like--that the probabilities that 2, 3, or 4 people share a "birthday" are 6/16, 8/16, and 2/16, respectively.) Indeed, whenever n-y >= 365, your formula yields 0, whereas as n gets large and y is fixed the probability should increase to a non-zero maximum before n reaches 365*y and then decrease, but never down to 0.
whuber

Why you are replacing 365 by n? The probability that 2 people share a birthday is computed as: 1 - Prob(they have unique birthday). Prob(that they have unique birthday) = (364/365). The logic is as follows: Pick a person. This person can have any day of the 365 days as a birthday. The second person can then only have a birthday on one of the remaining 364 days. Thus, the prob that they have a unique birthday is 364/365. I am not sure how you are calculating 6/16.
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.