Memperluas paradoks ulang tahun menjadi lebih dari 2 orang


29

Dalam Paradox Ulang Tahun tradisional, pertanyaannya adalah "apa peluang dua atau lebih orang dalam sekelompok n orang berbagi ulang tahun". Saya terjebak pada masalah yang merupakan perpanjangan dari ini.

Daripada mengetahui probabilitas bahwa dua orang berbagi ulang tahun, saya perlu memperluas pertanyaan untuk mengetahui berapa probabilitas x atau lebih banyak orang berbagi ulang tahun. Dengan x=2 Anda dapat melakukan ini dengan menghitung probabilitas bahwa tidak ada dua orang yang berbagi ulang tahun dan mengurangi dari 1 , tapi saya tidak berpikir saya dapat memperluas logika ini ke jumlah lebih besar x.

Untuk lebih menyulitkan ini saya juga membutuhkan solusi yang akan bekerja untuk jumlah yang sangat besar untuk n (jutaan) dan x (ribuan).


1
Saya kira itu masalah bioinformatika
csgillespie

3
Ini sebenarnya adalah masalah bioinformatika, tetapi karena bermuara pada konsep yang sama dengan paradoks ulang tahun, saya pikir saya akan menyimpan spesifikasi yang tidak relevan!
Simon Andrews

4
Biasanya saya akan setuju dengan Anda, tetapi dalam hal ini spesifik mungkin penting karena sudah ada paket biokonduktor yang melakukan apa yang Anda minta.
csgillespie

Jika Anda benar-benar ingin tahu, ini adalah masalah menemukan pola di mana saya mencoba untuk secara akurat memperkirakan probabilitas tingkat pengayaan tertentu dari urutan berikutnya dalam serangkaian urutan yang lebih besar. Karena itu saya memiliki serangkaian urutan dengan jumlah terkait dan saya tahu berapa banyak urutan yang saya amati dan berapa banyak urutan yang dapat diamati secara teoritis tersedia. Jika saya melihat urutan tertentu 10 kali dari 10.000 pengamatan saya perlu tahu seberapa besar kemungkinan itu terjadi secara kebetulan.
Simon Andrews

Hampir delapan tahun kemudian, saya memposting jawaban untuk masalah ini di stats.stackexchange.com/questions/333471 . Kode di sana tidak berfungsi untuk ukuran besar meskipun, karena butuh waktu kuadrat dalam n . n,n
whuber

Jawaban:


17

Ini adalah masalah penghitungan: ada mungkin penugasan b ulang tahun ke n orang. Dari jumlah tersebut, misalkan q ( k ; n , b ) adalah jumlah penugasan di mana tidak ada ulang tahun yang dibagi lebih dari k orang, tetapi setidaknya satu ulang tahun sebenarnya dibagi oleh k orang. Probabilitas yang kita cari dapat ditemukan dengan menjumlahkan q ( k ; n ,bnbnq(k;n,b)kk untuk nilai k yang sesuaidan mengalikan hasilnya dengan b - n .q(k;n,b)kbn

Hitungan ini dapat ditemukan dengan tepat untuk nilai kurang dari beberapa ratus. Namun, mereka tidak akan mengikuti formula langsung: kita harus mempertimbangkan pola cara di mana ulang tahun dapat ditetapkan . Saya akan mengilustrasikan ini sebagai pengganti memberikan demonstrasi umum. Misalkan n = 4 (ini adalah situasi menarik terkecil). Kemungkinannya adalah:nn=4

  • Setiap orang memiliki hari ulang tahun yang unik; kodenya adalah {4}.
  • Tepatnya dua orang berbagi ulang tahun; kodenya adalah {2,1}.
  • Dua orang memiliki satu hari ulang tahun dan dua lainnya memiliki yang lainnya; kodenya adalah {0,2}.
  • Tiga orang berbagi ulang tahun; kodenya adalah {1,0,1}.
  • Empat orang berbagi ulang tahun; kodenya adalah {0,0,0,1}.

Secara umum, kode adalah tupel hitungan yang k{a[1],a[2],}elemen nya menentukan berapa banyak tanggal lahir berbeda yang dibagikan olehorang-orang k . Jadi, khususnya,kthk

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

Perhatikan, bahkan dalam kasus sederhana ini, bahwa ada dua cara untuk mencapai maksimum dua orang per ulang tahun: satu dengan kode dan satu lagi dengan kode{0,2} .{2,1}

Kami dapat langsung menghitung jumlah kemungkinan tugas ulang tahun yang sesuai dengan kode yang diberikan. Nomor ini adalah produk dari tiga istilah. Salah satunya adalah koefisien multinomial; ia menghitung jumlah cara partisi orang ke sebuah [ 1 ] kelompok 1 , sebuah [ 2 ] kelompok 2 , dan seterusnya. Karena urutan kelompok tidak masalah, kita harus membagi koefisien multinomial ini dengan sebuah [ 1 ] ! a [ 2 ] ! na[1]1a[2]2a[1]!a[2]!; kebalikannya adalah masa jabatan kedua. Terakhir, susun grup dan berikan mereka masing-masing ulang tahun: ada kandidat untuk grup pertama,( b - m + 1b untuk yang kedua, dan seterusnya. Nilai-nilai ini harus dikalikan bersama, membentuk istilah ketiga. Ini sama dengan "produk faktorial" b ( a [ 1 ] + a [ 2 ] + ) di mana b ( m ) berarti b ( b - 1 )b1b(a[1]+a[2]+)b(m) .b(b1)(bm+1)

Ada rekursi yang jelas dan cukup sederhana yang menghubungkan hitungan untuk suatu pola dengan hitungan untuk pola { a [ 1 ] , ... , a [ k - 1 ] } . Ini memungkinkan penghitungan cepat penghitungan untuk nilai n sederhana . Secara khusus, sebuah [ k ] merupakan suatu [ orang masing-masing. Setelah ini sebuah [ k ]{a[1],,a[k]}{a[1],,a[k1]}na[k] tanggal lahir bersama oleh persis ka[k]ka[k]kelompok orang telah diambil dari n orang, yang dapat dilakukan dalam x cara yang berbeda (katakanlah), masih menghitung jumlah cara untuk mencapai pola { a [ 1 ] , ... , a [ k - 1 ]knx antara orang-orang yang tersisa. Mengalikan ini dengan x memberikan rekursi.{a[1],,a[k1]}x

Saya ragu ada rumus bentuk tertutup untuk , yang diperoleh dengan menjumlahkan jumlah untuk semua partisiq(k;n,b) yang istilah maksimumnya sama dengan k . Izinkan saya menawarkan beberapa contoh:nk

Dengan (lima kemungkinan ulang tahun) dan n =b=5 (empat orang), kami memperolehn=4

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

Di mana, misalnya, kesempatan bahwa tiga orang atau lebih dari empat orang berbagi "ulang tahun" yang sama (dari tanggal yang mungkin) sama dengan ( 80 + 5 ) /5 .(80+5)/625=0.136

Sebagai contoh lain, ambil dan n = 23 . Berikut adalah nilai-nilai q ( k ; 23 , 365 ) untuk k yang terkecilb=365n=23q(k;23,365)k (hanya untuk enam sig ara):

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.

Dengan menggunakan teknik ini, kita dapat dengan mudah menghitung bahwa ada sekitar 50% kemungkinan (setidaknya) tabrakan ulang tahun tiga arah di antara 87 orang, 50% kemungkinan tabrakan empat arah di antara 187, dan kemungkinan 50% dari tabrakan lima arah di antara 310 orang. Perhitungan terakhir itu mulai memakan waktu beberapa detik (dalam Mathematica, bagaimanapun) karena jumlah partisi yang dipertimbangkan mulai bertambah besar. Untuk secara substansial lebih besar kita membutuhkan perkiraan.n

Satu pendekatan diperoleh dengan cara distribusi Poisson dengan harapan , karena kita dapat melihat penugasan ulang tahun yang timbul dari b hampir (tetapi tidak cukup) variabel Poisson independen masing-masing dengan harapan n / b : variabel untuk setiap kemungkinan ulang tahun yang diberikan menjelaskan berapa banyak dari n orang memiliki ulang tahun itu. Distribusi maksimum karena itu kira-kira F ( k ) b di mana F adalah CDF Poisson. Ini bukan argumen yang keras, jadi mari kita lakukan sedikit pengujian. Perkiraan untuk n = 23 , bn/bbn/bnF(k)bFn=23 memberib=365

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

Dengan membandingkan dengan yang sebelumnya Anda dapat melihat bahwa probabilitas relatif bisa menjadi buruk ketika mereka kecil, tetapi probabilitas absolut diperkirakan cukup baik sekitar 0,5%. Pengujian dengan berbagai dan b menunjukkan perkiraan biasanya tentang kebaikan ini.nb

Untuk menyelesaikannya, mari kita pertimbangkan pertanyaan awal: ambil (jumlah pengamatan) dan b = 1n=10,000 (jumlah kemungkinan "struktur," sekitar). Perkiraan distribusi untuk jumlah maksimum "ulang tahun bersama" adalahb=1000000

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

(Ini adalah perhitungan cepat.) Jelas, mengamati satu struktur 10 kali dari 10.000 akan sangat signifikan. Karena dan b keduanya besar, saya berharap perkiraannya bekerja dengan cukup baik di sini.nb

Kebetulan, seperti yang Shane katakan, simulasi dapat memberikan pemeriksaan yang bermanfaat. Simulasi Mathematica dibuat dengan fungsi seperti

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

yang kemudian diulang dan diringkas, seperti dalam contoh ini yang menjalankan 10.000 iterasi dari , b = 1n=10000 kasus:b=1000000

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

Outputnya adalah

2 8503

3 1493

4 4

Frekuensi-frekuensi ini sangat sesuai dengan yang diprediksi oleh perkiraan Poisson.


Jawaban yang fantastis, terima kasih banyak @whuber.
JKnight

"Ada rekursi yang jelas dan cukup sederhana" - Yaitu?
Kodiologist

1
@Kodiologist Saya memasukkan deskripsi singkat tentang ide tersebut.
whuber

+1 tetapi di mana dalam pertanyaan awal Anda melihat bahwa n = 10.000 dan b = 1mln? OP sepertinya bertanya tentang n = 1mln dan k = 10000, dengan b tidak ditentukan (mungkin b = 365). Bukan berarti itu penting pada titik ini :)
amuba mengatakan Reinstate Monica

1
@amoeba Setelah sekian lama (enam tahun, 1600 jawaban, dan membaca dengan cermat puluhan ribu posting) saya tidak bisa mengingatnya, tetapi kemungkinan besar saya salah mengartikan baris terakhir. Dalam pembelaan saya, perhatikan bahwa jika kita membacanya secara harfiah jawabannya langsung (setelah menerapkan versi Prinsip Pigeonhole): sudah pasti bahwa di antara = jutaan orang akan ada setidaknya satu ulang tahun yang dibagi di antara setidaknya x = ribuan dari mereka! nx
whuber

2

Selalu mungkin untuk menyelesaikan masalah ini dengan solusi monte-carlo, meskipun itu jauh dari yang paling efisien. Berikut adalah contoh sederhana masalah 2 orang dalam R (dari presentasi yang saya berikan tahun lalu ; Saya menggunakan ini sebagai contoh kode yang tidak efisien), yang dapat dengan mudah disesuaikan dengan akun lebih dari 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))
}

Saya tidak yakin apakah solusi banyak jenis akan bekerja di sini.

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.


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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.