Doğum günü paradoksunu 2 kişiden fazla


29

Geleneksel Doğum Paradox soru "bir grup iki veya daha fazla kişi bu ne şansı olan n kişilik bir doğum günü paylaşan". Bunun bir uzantısı olan bir problem üzerinde sıkışıp kaldım.

İki kişinin doğum gününü paylaşma olasılığını bilmek yerine, x veya daha fazla kişinin doğum gününü paylaşma olasılığının ne olduğunu bilmek için soruyu genişletmem gerekiyor . İle x=2 Hiçbir iki kişi bir doğum günü paylaşmak ve o çıkarma olasılığını hesaplayarak yapabilirsiniz 1 , ama ben daha büyük sayılara bu mantığı uzatabilirsiniz sanmıyorum x .

Bunu daha da karmaşıklaştırmak için n (milyonlarca) ve x (binlerce) için çok büyük sayılarda çalışacak bir çözüme ihtiyacım var .


1
Bunun biyoinformatik sorunu olduğunu
varsayıyorum

3
Aslında biyoinformatik bir problem, ancak doğum günü paradoksuyla aynı konsepte düştüğü için alakasız özellikleri saklayacağımı düşündüm!
Simon Andrews

4
Normalde sizinle aynı fikirdeyim, ancak bu durumda, sizin sorduğunuzu yapan bir biyo-iletken paketi olabileceğinden, özellikler önemli olabilir.
csgillespie

Gerçekten bilmek istiyorsan, bu, daha büyük bir dizi içinde bir alt dizinin verilen zenginleştirme seviyesini doğru bir şekilde tahmin etmeye çalıştığım bir kalıp bulma problemidir. Bu nedenle ilişkili sayımlarla bir takım alt dizilerim var ve kaç tane ek gözlemlediğimi ve teorik olarak gözlemlenebilir kaç tane dizilimin olduğunu biliyorum. 10.000 gözlemden 10 kez belirli bir diziyi görseydim, bunun tesadüfen oluşma ihtimalinin ne kadar olduğunu bilmem gerekir.
Simon Andrews

Neredeyse sekiz yıl sonra, bu soruyu istatistik.stackexchange.com/questions/333471 adresinde cevapladım . Kod büyük için çalışma var değil n, içeri kuadratik zaman alır, çünkü gerçi n .
whuber

Yanıtlar:


17

Bu sayma sorunudur: var muhtemel atamaları b için doğum günü n insanlar. Bunlardan let q ( k ; n , b ) hayır doğum günü daha paylaştığı edildiği atamaları sayı k insanlar ama aslında en az bir doğum günü tarafından paylaşılan k insanlar. Aradığımız olasılık , uygun k değerleri için q ( k ; n , b ) toplanarak ve sonucu b - n ile çarparak bulunabilir .bnbnq(k;n,b)kkq(k;n,b)kbn

Bu sayılar tam olarak birkaç yüzden küçük değerleri için bulunabilir . Bununla birlikte, hiçbir basit formülü takip etmeyeceklerdir: doğum günlerinin atanma yöntemlerini dikkate almalıyız . Bunu genel bir gösteri yapmak yerine açıklayacağım. Let n = 4 (bu en küçük ilginç bir durumdur). Olasılıklar:nn=4

  • Her insanın kendine özgü bir doğum günü vardır; kod {4}.
  • Tam olarak iki kişi doğum gününü paylaşıyor; kod {2,1}.
  • İki kişinin bir doğum günü, diğer ikisinin bir tane daha var; kod {0,2} 'dir.
  • Üç kişi doğum gününü paylaşıyor; kod {1,0,1}.
  • Dört kişi doğum gününü paylaşıyor; kod {0,0,0,1} 'dir.

Genellikle, bu kod sayar bir başlık olur k inci birçok farklı doğum günlerinin tam olarak nasıl paylaşıldığını eleman öngören k insanlar. Böylece, özellikle,{a[1],a[2],}kthk

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

Bu basit durumda bile, doğum günü başına en fazla iki kişinin erişebileceği iki yol olduğunu unutmayın: biri koduyla , diğeri ise { 2 , 1 } koduyla{0,2}{2,1} .

Herhangi bir koda karşılık gelen olası doğum atamalarının sayısını doğrudan sayabiliriz. Bu sayı üç terimin ürünüdür. Biri çok terimli bir katsayıdır; o bölümleme yollarından sayar içine insanlar bir [ 1 ] gruplarının 1 , bir [ 2 ] grupları 2 , vb. Grupların sırası önemli değil, çünkü biz bu multinomial katsayısı bölmek zorunda bir [ 1 ] ! bir [ 2 ] ! na[1]1a[2]2a[1]!a[2]!; karşıt ikinci terimdir. Son olarak, grupları sıralayın ve her birine bir doğum günü verin: birinci grup için aday , ikincisi için b - 1 vb. Bu terimler, üçüncü terimi oluşturan, birlikte çarpılmalıdır. Bu "faktör ürünü" eşittir b ( a [ 1 ] + , bir [ 2 ] + ) b ( m ) vasıtası b ( b - 1 ) ( b - m + 1bb1b(a[1]+a[2]+)b(m) .b(b1)(bm+1)

Bir model için sayımı ile ilgili açık ve oldukça basit özyineleme vardır model için sayımına { a [ 1 ] , ... , bir [ k - 1 ] } . Bu, n'nin mütevazı değerleri için sayımların hızlı bir şekilde hesaplanmasını sağlar . Spesifik olarak, bir [ k ] , tam olarak k tarafından paylaşılan bir [ k ] doğum tarihini temsil eder.{a[1],,a[k]}{a[1],,a[k1]}na[k]a[k]kher biri. Bu işlemlerden sonra grupları k insanlardan çizilmiştir n yapılabilecek kişiler, x ayrı yollar (diyelim), bu desen ulaşma yollarını sayısını saymak için kalır { a [ 1 ] , ... , kalanlar arasında a [ k - 1 ] } . Bunu x ile çarpmak özyinelemeyi verir.a[k]knx{a[1],,a[k1]}x

Q ( k ; n , b ) ' nin kapalı bir formülü olduğundan şüpheliyim. q(k;n,b) , maksimum terimi k'ye eşit olan tüm bölümleri için sayıları toplayarak elde edilir . Bana bazı örnekler vereyim:nk

İle b=5 (beş olası doğum) ve (dört kişi) elde ederizn=4

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

Örneğin, dörtten üç veya daha fazla insanın aynı "doğum gününü" paylaşması ( olası tarihten) eşittir ( 80 + 5 ) / 625 = 0.1365(80+5)/625=0.136 .

Başka bir örnek olarak, ve n = 23 atın . İşte en küçük k için q ( k ; 23 , 365 ) değerleri ( sadece altı işaret incir):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.

Bu tekniği kullanarak, 87 kişi için yaklaşık% 50, en az 87 kişi arasında üç yollu doğum günü çarpma olasılığı,% 50 oranında 187 kişi arasında dört yönlü çarpışma şansı ve% 50 şans olduğunu hesaplayabiliriz. 310 kişi arasında beş yönlü bir çarpışma. Bu son hesaplama birkaç saniye (Mathematica'da, yine de) sürmeye başlayacaktır, çünkü dikkate alınması gereken bölümlerin sayısı artmaya başlar. Büyük ölçüde için, yaklaşık bir değere ihtiyacımız var.n

Bir yaklaşım, beklentisiyle Poisson dağılımı aracılığıyla elde edilir , çünkü bir doğum günü tahsisatını, her biri n / b beklentisi olan bağımsız Poisson değişkenlerinden ( b ) beklenen doğum gününü görebiliriz: herhangi bir olası doğum günü için değişken n insanının kaçının o doğum gününü anlattığını açıklar . Bu nedenle maksimumun dağılımı yaklaşık olarak F ( k ) b'dir, burada F , Poisson CDF'dir. Bu kesin bir argüman değil, o yüzden biraz test yapalım. N = 23 , b için yaklaştırman/bbn/bnF(k)bFn=23 verirb=365

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

Önceki ile karşılaştırıldığında, göreceli olasılıkların küçük olduklarında zayıf olabileceğini görebilirsiniz, ancak mutlak olasılıklar makul bir şekilde yaklaşık% 0,5'e yakındır. Geniş bir ve b aralığındaki testler , yaklaşımın genellikle bu malla ilgili olduğunu göstermektedir.nb

Kaydırmak için asıl soruyu düşünelim: n=10,000 (gözlem sayısı) ve b=1000000 (yaklaşık olası "yapı" sayısı). Maksimum "paylaşılan doğum günü" sayısı için yaklaşık dağılım

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

(Bu hızlı bir hesaplamadır.) Açıkça, bir yapıyı 10.000'den 10 kez görmek çok önemli olacaktır. Çünkü n ve hem büyük, oldukça iyi Burada iş yaklaşma bekliyoruz.b

Bu arada, Shane'in dediği gibi simülasyonlar faydalı kontroller sağlayabilir. Bir Mathematica simülasyonu, şuna benzer bir işlevle oluşturulur

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

10.000 yinelemesini çalıştıran bu örnekte olduğu gibi daha sonra yinelenir ve özetlenir ,n=10000b=1000000 durum:

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

Çıktı

2 8503

3 1493

4 4

Bu frekanslar, Poisson yaklaşımı tarafından öngörülenlerle yakından aynı fikirde.


Ne harika bir cevap, çok teşekkür ederim @whuber.
JKnight

“Açık ve oldukça basit bir tekrarlama var” - Yani?
Kodiolog

1
@Kodiolog Fikir hakkında kısa bir açıklama ekledim.
whuber

+1 ama asıl soruda n = 10000 ve b = 1 milyon olduğunu gördünüz mü? OP, n = 1 milyon ve k = 10000 hakkında, b belirtilmemiş olarak (muhtemelen b = 365) soruyor gibi görünüyor. Bu noktada önemli değil :)
amip Reinstate Monica

1
@ amoeba Bunca zamandan sonra (altı yıl, 1600 cevap ve on binlerce mesajı yakından okuyarak) hatırlayamıyorum, ama büyük olasılıkla son satırı yanlış yorumladım. Savunmamda, kelimenin tam anlamıyla okursak cevabın derhal olduğunu unutmayın (Güvercin Deliği Prensibi'nin bir versiyonunun uygulanması üzerine): n = milyonlarca insan arasında en az x arasında paylaşılan en az bir doğum günü olacağı kesindir . = onlardan binlerce! nx
whuber

2

En verimli olmaktan uzak olmasına rağmen, bu problemi monte-carlo çözümüyle çözmek her zaman mümkündür. İşte R'deki 2 kişilik problemin basit bir örneği ( geçen yıl verdiğim sunumdan ; bunu verimsiz kodun bir örneği olarak kullandım);

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))
}

Çoklu tip çözümlerin burada işe yarayacağından emin değilim.

I think that generalisation still only works for 2 or more people sharing a birthday - just that you can have different sub-classes of people.
Simon Andrews

1

This is an attempt at a general solution. There may be some mistakes so use with caution!

First some notation:

P(x,n) be the probability that x or more people share a birthday among n people,

P(y|n) be the probability that exactly y people share a birthday among n people.

Notes:

  1. Abuse of notation as P(.) is being used in two different ways.

  2. By definition y cannot take the value of 1 as it does not make any sense and y = 0 can be interpreted to mean that no one shares a common birthday.

Then the required probability is given by:

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

Now,

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

Here is the logic: You need the probability that exactly y people share a birthday.

Step 1: You can pick y people in (ny) ways.

Step 2: Since they share a birthday it can be any of the 365 days in a year. So, we basically have 365 choices which gives us (365365)y.

Step 3: The remaining ny people should not share a birthday with the first y people or with each other. This reasoning gives us k=1k=ny(1k365).

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


Bu çözüm boyutluluk lanetinden zarar görecek mi? Eğer n = 365 yerine n = 10 ^ 6 ise bu çözüm hala uygulanabilir mi?
csgillespie

Bazı boyutların yüksek boyutlarla başa çıkmak için kullanılması gerekebilir. Belki de, Stirling'in yaklaşımını binom katsayısındaki faktörler için kullanın. Ürün terimleriyle başa çıkmak için, günlükleri alıp ürünler yerine toplamları hesaplayabilir ve ardından toplamın anti-log'unu alabilirsiniz.

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.