- 運命(何か共通性がある)か - 本当に偶然 かを知りたい。 Rだとpbirthdayとかqbirthdayという関数が用意されている。 40人学級で少なくとも一組は同じ誕生日となるのは、 > pbirthday(40) [1] 0.8884 (*結構、計算誤差が出やすい数値なよう。pbirthdayのhelpにapproximateとかいてある。後ろの方で書く。) 逆に50%の確率で一組は居るという集団(クラス)の数を知りたい場合は、 >qbirthday(0.5) [1] 22 (* birthdayで見ると、birthday(22) => 0.499, pbirthday(23) => 0.5301。これは概算。 正確には23人で、1 - prod(364:(364- (23-2)) / rep(365, (23-1))) => 0.5073 となる。 正確性を求める場合で、同じ場合が二つの場合は、自分で計算した方が良いと、、、 まあ、メンドなのでそのままいく。 この関数自体は、デフォルト引数が、確率 => 0.5 場合数(classes) => 365(誕生日数)、一致組数(coincident)=2 なので、引数を変えて、 三組いる確率が5%になる集まった人数を知りたいとなると、 qbirthday(prob=0.05, coincident=3) [1] 34 3人同じ誕生日の人がいるという集団のシチュエーションを期待したいなら、8割がたで、 qbirthday(prob=0.8, coincident=3) [1] 109 同じ誕生月ならかなり少なくて良い。前提が荒いけど、、 qbirthday(prob=0.5,classes=12, coincident=3) [1] 8 通常の人間の感覚より確率は高いので心理的な効果を設計することもできそう。 セミナーなんかで、ランダムのグループを作るより、偶然を装って、何かの一致をキーにグルーピングさせるとか、、、人間の心理的傾向の一面 確率を勉強するセミナーには、、、参加者に余計な負荷がかかるだけか。 グラフも簡単、ここでは関数を使わず、計算式でだした。一致人数が増えたら、関数 pbirthdayを使う方が手早いみたいだ。 > plot(1-sapply(10:50, function(n){prod((364:(365-n+1))/rep(365,(n-1)))}),type="l") > abline(h=seq(0.2,0.8,by=0.2),col = "lightgray", lty=1) |