LoginSignup
0
2

More than 5 years have passed since last update.

統計学入門のお供 Julia (6) - ド・メレの問題

Last updated at Posted at 2018-11-03

統計学入門のお供 Julia (1) - 標準得点、偏差値得点 - Qiita
統計学入門のお供 Julia (2) - ピアソンの積率相関係数 - Qiita
統計学入門のお供 Julia (3) - 順位相関係数と自己相関係数 - Qiita
統計学入門のお供 Julia (4) - 最小二乗法と決定係数 - Qiita
統計学入門のお供 Julia (5) - ベイズの定理 - Qiita
統計学入門のお供 Julia (6) - ド・メレの問題 = Oiita

 統計学を勉強するため「統計学入門」(東京大学出版会)を読み始めました。練習問題があるのですが、これも勉強中のJuliaを使って計算していきたいと思います。

「確率論入門」(ちくま学芸文庫、赤攝也)も参考にしています。確率論の基礎的なところの考え方を詳細に説明してあります。特に多重試行の説明は詳しいです。文庫本なので持ちやすく読みやすいです。

組み合わせの計算には、Julia言語のBaseのMathematicsカテゴリのbinomial関数を使います。BaseなのでMathematicsカテゴリの関数は特に何もしなくとも利用できます。
Mathematics
https://docs.julialang.org/en/v1/base/math/

1.ド・メレの問題

P85 問4.1

 問 i)

サイコロを4回投げるとき、6の目が少なくとも1回出るのに賭けるか、1回も出ない方に賭けるか?

3通りの方法で解いてみます。

\begin{align}
&サイコロを振りどの目が出るかを確認する試行を考える。\\
&\Omega : 全事象 \\
&E_i \quad (i=1,2,3,4): \Omega の部分集合とするとき以下のように定義する。\\
&(E_1, E_2, E_3, E_4) \equiv \{ (a_1, a_2, a_3, a_4) | a_i \in E_i  \quad 
 i=1,2,3,4\}\\
&これは4回続けてサイコロを振る事象を表している。\\
\\
&今サイコロを振った時に、6が出る事象をEとする。\\
\\
&4回続けてサイコロを振った時に少なくとも1回は6が出る事象は、\\
&4回連続して6以外が出る事象の補集合と考えられる。\\
&また4回連続して6以外が出る事象は以下のように表現できる。\\
&F^{(4)} \equiv (E^c, E^c, E^c, E^c)\\
\\
&故に\\
&P(F^{(4)}) = P(E^c) P(E^c) P(E^c) P(E^c) = P(E^c)^4=(5/6)^4\\
\\
&求める確率は 1-(5/6)^4 = 0.5177469135802468\\
\\
\\
\\
&************************************\\
\\
&別解です。\\
&補集合で考えるのではなく、もう少し正面から解いてみます。\\
\\
&4回続けてサイコロを振った時に、少なくとも1回は6が出る事象は以下のように表現される。\\
&E^{(4)} \equiv (E, \Omega, \Omega, \Omega) \cup (\Omega, E, \Omega, \Omega) \cup (\Omega, \Omega, E, \Omega) \cup (\Omega, \Omega, \Omega, E) \tag{1}\\
\\
\\
&加法の定理 : P(A \cup B) =P(A) + P(B) - P(A \cap B) \tag{2}\\
\\
&加法の定理を繰り返し使うことで、以下が導かれる\\
&P(A \cup B \cup C \cup D) = P(A) + P(B) + P(C) +P(D)\\
&\quad 
 - P(A \cap B) - P(A \cap C) - P(A \cap D) - P(B \cap C) - P(B \cap D) - P(C \cap D)\\
&\quad + P(A \cap B \cap C) + P(A \cap B \cap D) + P(A \cap C \cap D) + P(B \cap C \cap D)\\
&\quad - P(A \cap B \cap C \cap D) \tag{3}\\
\\
&A=(E, \Omega, \Omega, \Omega), \quad B= (\Omega, E, \Omega, \Omega), \\
&C=(\Omega, \Omega, E, \Omega),\quad D=(\Omega, \Omega, \Omega, E)として(3)を置き換える。\\
\\
\\
&P(E^{(4)}) =P(E, \Omega, \Omega, \Omega)+P(\Omega, E, \Omega, \Omega)+P(\Omega, \Omega, E, \Omega)+P(\Omega, \Omega, \Omega, E)\\
&-P(E, E, \Omega, \Omega)-P(E, \Omega, E, \Omega)-P(E, \Omega, \Omega, E)-P(\Omega, E, E, \Omega)\\
&-P(\Omega, E, \Omega, E)-P(\Omega, \Omega, E, E)\\
&+P(E, E, E, \Omega)+P(E, E, \Omega, E)+P(E, \Omega, E, E)+P(\Omega, E, E, E)\\
& - P(E, E, E, E)\\
&=4*(1/6) -6*(1/6)^2+4*(1/6)^3-(1/6)^4=0.5177469135802469
\\
\\
&誤差を除いて、計算結果は同じです。\\
&最初の方が簡単だけど、別解の方が全体の構造が良くわかり汎用性があります。\\
\\
\\
&************************************\\
\\
&別解2です。\\
&2項分布の考え方で解いてみます。\\
\\
&確率変数 X_i^{(4)} を以下のように定義する。\\
\\
&X_i^{(4)}(a_1,a_2,a_3,a_4) = 1 \qquad (a_i \in E)\\
&X_i^{(4)}(a_1,a_2,a_3,a_4) = 0 \qquad (a_i \notin E)\\
\\
&この時、確率変数S^{(4)}を以下のように定義する。\\
\\
&S^{(4)} \equiv X_1^{(4)} + X_2^{(4)} + X_3^{(4)} + X_4^{(4)}\\
\\
&S^{(4)}(a_1,a_2,a_3,a_4) = k は、\\
&a_1,a_2,a_3,a_4 のうちEに属するものの個数がk個であることを意味します。\\
&当然、0 \leqq k \leqq 4 が成り立ちます。\\
\\
&\{ S^{(4)}=k \} \equiv \{(a_1,a_2,a_3,a_4) \in (\Omega,\Omega,\Omega,\Omega) \quad | \quad S^{(4)}
(a_1,a_2,a_3,a_4)=k \}
\\
\\
&例えばk=3の時は、以下のように4個から3個を選び出す組み合わ数\begin{pmatrix} 4 \\3 \end{pmatrix} 通りの\\
&お互いに背反な事象に分割されます。\\
\\
&\{ S^{(4)}=3 \} = (E,E,E,E^c) \cup (E,E,E^c,E) \cup (E,E^c,E,E) \cup (E^c,E,E,E)
\\
\\
\\
&一般に\{ S^{(4)}=k \}は、4個からk個を選び出す組み合わ数\begin{pmatrix} 4 \\k \end{pmatrix} 通りの\\
&お互いに背反な事象に分割されます。\\
&それぞれの事象の確率は、k個のEと、(4-k)個のE^cですからP(E)^k(1-P(E)^{(4-k)}です。\\
&P(\{ S^{(4)}=k \}) = \begin{pmatrix} 4 \\k \end{pmatrix} P(E)^k(1-P(E))^{(4-k)}\\
\\
\\
&各 \{ S^{(4)}=k \} \quad i=1,2,3,4は明らかに排反だから、求めるものは以下のようになる。\\
&P(\{ S^{(4)}=1 \})+P(\{ S^{(4)}=2 \})+P(\{ S^{(4)}=3 \})+P(\{ S^{(4)}=4 \})\\
\\
&後はJuliaのプログラムで解いてみたいと思います。
\\
&\qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad\\
\end{align}

以下のプログラムはより汎用になっていますが、n=4、k=1で実行すれば問題と同じものです。

function mybinomial(k, n, p)
    s = 0.0
    for i in k:n
        s += binomial(n,i)*(p)^i*(1-p)^(n-i)
    end
    s
end

mybinomial(1,4,1/6)
0.5177469135802469

2項分布で解いても同じ結果ですね。

 問 ii)

サイコロを2回同時に24回投げるとき、(6,6)の目が少なくとも1回出るのに賭けるか、1回も出ない方に賭けるか?

(6,6)の目以外が24回連続して出る確率は以下の計算で求まる。
(35/36)^24
0.5085961238690966

2項分布でも求まる

(6,6)の目が少なくとも1回出る確率
mybinomial(1,24,1/36)
0.49140387613090303

(6,6)の目以外が24回連続して出る確率
1-mybinomial(1,24,1/36)
0.508596123869097

2.ホイヘンスの問題

P85 問4.2

2個のサイコロを何回投げれば、そのうちの1回は目の和が12の成る確率が0.9を越えるか?

本書の解答とは別会です。2項分布を使って以下のように確かめられます。

mybinomial(1,big(81),1/36)
8.97903928782527159074445136...e-01

mybinomial(1,big(82),1/36)
9.00739930760790253942017745...e-01

つまり82回投げればよい。
bigを使わないとOverflowErrorになります。big様ですね。

3.看護婦の問題

P85 問4.3

30人の看護婦を15人ずつの2組の交代勤務に分ける分け方は何通りか?
組み合わせの問題ですね。

binomial(30,15)
155117520

4.誕生日の問題

P85 問4.4

r人の集団中に同じ誕生日の人が少なくとも2人いる確率を考える問題です。

どうもしっくりこないので.....少し問題の文章を自分なりに噛み砕いてあります。確率における試行の意味を明確にしたかっただけですので、本質は変わりません。

\begin{align}
\\
&r人の集団を考える。\\
&壺の中に365個の玉があり、それぞれ1,2,3,..,365の番号が振られている。\\
\\
&神様はr人の誕生日を以下のrステップの手順で決める。\\
&(1)神様が壺から1個取り出し、1人目の誕生日を決める。印をつけて玉は戻す。\\
&(2)神様が壺から1個取り出し、2人目の誕生日を決める。印をつけて玉は戻す。\\
&.....\\
&(r)神様が壺から1個取り出し、r人目の誕生日を決める。印をつけて玉は戻す。\\
\\
&同じ誕生日の人が一組もいないことは、\\
&壺の中に、2つ以上の印ついているボールが存在しないことと同じ意味です。(*)\\
&そのような確率を、各ステップにおいて求めてみましょう。\\
\\
&(1)ステップにおいて印のついていない玉を選択する確率は1です。\\
&(2)ステップにおいて印のついていない玉を選択する確率は(365-1)/365です。\\
&(3)ステップにおいて印のついていない玉を選択する確率は(365-2)/365です。\\
&.....\\
&(r)ステップにおいて印のついていない玉を選択する確率は(365-r+1)/365です。\\
\\
&つまり2つ以上の印ついているボールが存在しない確率は以下の式になります。\\
\\
&P = ((365-1)/365)((365-2)/365).....((365-r+1)/365)
\\
&\qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad  \qquad \qquad \qquad  \qquad\\
\end{align}

確率を求める式がわかったので、juliaでプログラムします。rをパラメータにして、1から60まで変化させ、それぞれの確率を計算します。最後にグラフとして描画します。

n=60
rs=zeros(n)
ps=zeros(n)

function mybirth(r)
    p = 1.0
    for i in 1:r
        p *= ((365-i+1)/365)
    end
    1-p
end

function mybirth_r()
    for r in 1:n
        p = mybirth(r)
        println("r=",r," p=",p)
        rs[r] = r
        ps[r] = p 
    end
    1
end

mybirth_r()

using Plots
plot(rs,ps,seriestype=:scatter)

出力結果は以下の通りです。

r=1 p=0.0
r=2 p=0.002739726027397249
...
r=5 p=0.02713557369979347
...
r=10 p=0.11694817771107768
...
r=15 p=0.25290131976368646
...
r=20 p=0.41143838358058027
r=21 p=0.443688335165206
r=22 p=0.4756953076625503
r=23 p=0.5072972343239857
r=24 p=0.538344257914529
r=25 p=0.568699703969464
...
r=30 p=0.7063162427192688
...
r=35 p=0.8143832388747153
...
r=40 p=0.891231809817949
...
r=50 p=0.9703735795779884
...
r=60 p=0.994122660865348

60人いると、同じ誕生日ペアが、99%以上の確率で存在することになります。
rをx軸、確率をy軸にして描いたグラフは以下の通りです。

image.png

またこの問題は、以下のサイトで詳しく説明されています。

なぜ「23人いれば同じ誕生日の人がいる確率は50%」なのか

誕生日が一致する確率はどのくらいか - 統計学入門

同じ誕生日の二人組がいる確率について - 高校数学の美しい物語

今回は以上です。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2