Я кодирую проблему дня рождения. Мой код:

> k = 100
> for (n in 1:100) {
+ prob =  1 - (0:(n-1))/365
+ k[n] = 1 - prod(prob) }
> plot(k)

Мне нужно найти n, для которого ~ 50% вероятность, что у двух людей один день рождения. Любая помощь? Я пробовал погуглить, но могу найти информацию только о популярных дистрибутивах.

r pdf
1
Bob 23 Янв 2015 в 06:53

3 ответа

Лучший ответ

Вы уже решили проблему. Вы можете найти его "на глаз", просто наберите "k" и начинайте считать. Или вы можете попросить R найти его для вас. Первый день, когда вероятность больше или равна 0,5, является номером дня:

#TRUE is the maximum, pick the first of the ties:
which.max(k >= .5) 

Мы можем найти день с минимальным абсолютным отличием от вероятности 0,5:

which.min(abs(k - .5))
1
Rick 23 Янв 2015 в 05:14

Попробуйте следующее из пакета stats ...

 approx(k,1:100, xout = .5)

Вышеупомянутое использует линейную интерполяцию между двумя ближайшими предоставленными точками, на которые я могу попасть, потому что это неточно ...

Но если мы решаем задачу о дне рождения, я предполагаю, что мы изучаем кодирование, а не запускаем ракету, так что, может быть, это достаточно близко?

1
colemand77 23 Янв 2015 в 06:24

«Задача дня рождения» уже имеет две функции R, предназначенные для решения различных ее форм:

birthday {stats}    R Documentation
Probability of coincidences

Description

Computes answers to a generalised birthday paradox problem. pbirthday computes the 
probability of a coincidence and qbirthday computes the smallest number of observations 
needed to have at least a specified probability of coincidence.

Usage

qbirthday(prob = 0.5, classes = 365, coincident = 2)
pbirthday(n, classes = 365, coincident = 2)

Итак, значения по умолчанию для `qbirthday ::

 > qbirthday()
 [1] 23
4
IRTFM 23 Янв 2015 в 05:40