Розширення парадокса іменинника більш ніж на 2 людини


29

У традиційному парадоксі від дня народження виникає питання "які шанси на те, що два або більше людей у ​​групі з людей поділяють день народження". Я застряг у проблемі, яка є продовженням цього.n

Замість того, щоб знати ймовірність того, що двоє людей поділяють день народження, мені потрібно розширити питання, щоб знати, яка ймовірність того, що чи більше людей поділяють день народження. З ви можете це зробити, обчисливши ймовірність того, що ніхто не розділяє день народження, і відняти його від , але я не думаю, що я можу поширити цю логіку на більшу кількість .x = 2 1 xxx=21x

Щоб ще більше ускладнити це, мені також потрібно рішення, яке буде працювати для дуже великих чисел для (мільйонів) і (тисяч).xnx


1
Я припускаю, що це проблема біоінформатики
csgillespie

3
Це насправді проблема біоінформатики, але оскільки вона зводиться до тієї ж концепції, що і парадокс дня народження, я думав, що врятую невідповідну специфіку!
Саймон Ендрюс

4
Зазвичай я погоджуюся з вами, але в цьому випадку специфіка може мати значення, оскільки вже може існувати пакет біопровідника, який виконує те, що ви просите.
csgillespie

Якщо ви дійсно хочете знати, це проблема пошуку шаблону, де я намагаюся точно оцінити ймовірність заданого рівня збагачення подальностей у межах набору більших послідовностей. Тому у мене є набір підрядів з пов'язаними підрахунками, і я знаю, скільки послідовностей я спостерігав і скільки теоретично спостерігаються послідовностей. Якщо я бачив певну послідовність 10 разів із 10000 спостережень, мені потрібно знати, наскільки це можливо сталося випадково.
Саймон Ендрюс

Майже через вісім років я опублікував відповідь на цю проблему на сайті stats.stackexchange.com/questions/333471 . Код там не працює при великому n, хоча, тому що це займає квадратичне час в n .
whuber

Відповіді:


17

Це проблема підрахунку: є можливих присвоєння б народження до російських людей. Нехай q ( k ; n , b ) - кількість завдань, на які день народження не ділиться більш ніж k людьми, але принаймні один день народження насправді ділиться на k людей. Ймовірність, яку ми шукаємо, може бути знайдена шляхом підсумовування q ( k ; n , b ) для відповідних значень k та множення результату на b - n .bnbnq(k;n,b)kkq(k;n,b)kbn

Ці підрахунки можна знайти саме для значень менше декількох сотень. Однак вони не будуть дотримуватися жодної прямої формули: ми повинні розглянути зразки способів призначення днів народження . Я проілюструю це замість надання загальної демонстрації. Нехай n = 4 (це найменша цікава ситуація). Можливості:nn=4

  • Кожна людина має унікальний день народження; код - {4}.
  • Рівно двоє людей поділяють день народження; код - {2,1}.
  • Двоє людей мають один день народження, а інші двоє мають інший; код дорівнює {0,2}.
  • Троє людей поділяють день народження; код {1,0,1}.
  • Чотири людини поділяють день народження; код {0,0,0,1}.

Як правило, код є кортежем графів , чиї K - й передбачає елемент , як багато різних дати народження розділяються точно K людей. Таким чином, зокрема,{a[1],a[2],}kthk

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

Зауважте, навіть у цьому простому випадку існує два способи досягнення максимум двох людей на день народження: один з кодом та інший з кодом { 2 , 1 } .{0,2}{2,1}

Ми можемо безпосередньо підрахувати кількість можливих доручень на день народження, що відповідають будь-якому коду. Це число - твір трьох доданків. Один - мультиноміальний коефіцієнт; він підраховує число способів розбиття людей в протягом [ 1 ] групи 1 , [ 2 ] групи з 2 , і так далі. Оскільки послідовність груп не має значення, ми повинні розділити цей коефіцієнт многочлена на в [ 1 ] ! a [ 2 ] ! na[1]1a[2]2a[1]!a[2]!; її зворотний - другий член. Нарешті, складіть групи та призначте їх кожному дню народження: є кандидати для першої групи, b - 1 для другої тощо. Ці значення треба помножити разом, утворюючи третій доданок. Він дорівнює "факторному добутку" b ( a [ 1 ] + a [ 2 ] + ), де b ( m ) означає b ( b - 1 ) ( b - m + 1bb1b(a[1]+a[2]+)b(m) .b(b1)(bm+1)

Існує очевидна і досить проста рекурсія, що стосується підрахунку для шаблону до числа для шаблону { a [ 1 ] , , a [ k - 1 ] } . Це дозволяє швидко обчислити підрахунки для скромних значень n . В Зокрема, [ K ] представляє собою [ K ] дати народження поділяють точно до{a[1],,a[k]}{a[1],,a[k1]}na[k]a[k]kлюди кожен. Після цього [ до ] групи K людей були взяті з російських людей, які можуть бути зроблені в х різних способах (скажімо), залишилися підрахувати кількість способів досягнення шаблону { [ 1 ] , ... , a [ k - 1 ] } серед решти людей. Помноження цього на x дає рекурсію.a[k]knx{a[1],,a[k1]}x

Я сумніваюся, що існує формула закритої форми для , яка отримується шляхом підсумовування підрахунків для всіх розділів n , максимальний член яких дорівнює k . Дозвольте запропонувати кілька прикладів:q(k;n,b)nk

З (п’ять можливих днів народження) і n = 4 (чотири людини), ми отримуємоb=5n=4

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

Звідси, наприклад, шанс, що троє чи більше людей із чотирьох поділяють один і той же «день народження» (з можливих дат), дорівнює ( 80 + 5 ) / 625 = 0,136 .5(80+5)/625=0.136

As another example, take b=365 and n=23. Here are the values of q(k;23,365) for the smallest k (to six sig figs only):

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.

Using this technique, we can readily compute that there is about a 50% chance of (at least) a three-way birthday collision among 87 people, a 50% chance of a four-way collision among 187, and a 50% chance of a five-way collision among 310 people. That last calculation starts taking a few seconds (in Mathematica, anyway) because the number of partitions to consider starts getting large. For substantially larger n we need an approximation.

One approximation is obtained by means of the Poisson distribution with expectation n/b, because we can view a birthday assignment as arising from b almost (but not quite) independent Poisson variables each with expectation n/b: the variable for any given possible birthday describes how many of the n people have that birthday. The distribution of the maximum is therefore approximately F(k)b where F is the Poisson CDF. This is not a rigorous argument, so let's do a little testing. The approximation for n=23, b=365 gives

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

By comparing with the preceding you can see that the relative probabilities can be poor when they are small, but the absolute probabilities are reasonably well approximated to about 0.5%. Testing with a wide range of n and b suggests the approximation is usually about this good.

n=10,000b=1000000

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

(This is a fast calculation.) Clearly, observing one structure 10 times out of 10,000 would be highly significant. Because n and b are both large, I expect the approximation to work quite well here.

Incidentally, as Shane intimated, simulations can provide useful checks. A Mathematica simulation is created with a function like

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

which is then iterated and summarized, as in this example which runs 10,000 iterations of the n=10000, b=1000000 case:

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

Its output is

2 8503

3 1493

4 4

These frequencies closely agree with those predicted by the Poisson approximation.


What a fantastic answer, thank you very much @whuber.
JKnight

"There is an obvious and fairly simple recursion" — Namely?
Kodiologist

1
@Kodiologist I inserted a brief description of the idea.
whuber

+1 but where in the original question did you see that n=10000 and b=1mln? The OP looks like it is asking about n=1mln and k=10000, with b unspecified (presumably b=365). Not that it matters at this point :)
amoeba says Reinstate Monica

1
@amoeba After all this time (six years, 1600 answers, and closely reading tens of thousands of posts) I cannot recall, but most likely I misinterpreted the last line. In my defense, note that if we read it literally the answer is immediate (upon applying a version of the Pigeonhole Principle): it is certain that among n=millions of people there will be at least one birthday that is shared among at least x=thousands of them!
whuber

2

It is always possible to solve this problem with a monte-carlo solution, although that's far from the most efficient. Here's a simple example of the 2 person problem in R (from a presentation I gave last year; I used this as an example of inefficient code), which could be easily adjusted to account for more than 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))
}

I am not sure if the multiple types solution will work here.

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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.