ストーリーがあれば、シミュレーションできます!
確率分布を説明するストーリーに、既知の分布名が当てはまらないこともあります。そんなときも心配はいりません。常にシミュレーションで再現できます。この演習と次の演習でそれを行います。
以前の演習では、メジャーリーグのノーヒットノーランという希少事象を扱いました。1試合で単打・二塁打・三塁打・本塁打の4種類すべてを記録する「サイクルヒット」も、野球ではまれな出来事です。ノーヒッターと同様に、これはポアソン過程としてモデル化できるため、サイクルヒットが起きるまでの時間も指数分布に従います。
では、ノーヒッターが起きてから続けてサイクルヒットが出るまで、どれくらい待つ必要があるでしょうか。考え方としては、まずノーヒッターが起きるまで待ち、その後でサイクルヒットが起きるまで待つ、という流れです。言い換えると、二つの異なるポアソン過程の到来を連続して待つときの合計待ち時間は何か、という問題です。合計待ち時間は、ノーヒッターを待った時間とサイクルヒットを待った時間の和になります。
これから、このストーリーで記述される分布からサンプリングする関数を書いていきます。
この演習はコースの一部です
Pythonで学ぶ統計的思考(パート1)
演習の手順
- 呼び出しシグネチャ
successive_poisson(tau1, tau2, size=1)の関数を定義し、ノーヒッターとサイクルヒットの待ち時間をサンプリングします。- ノーヒッターの待ち時間を、パラメータ
tau1の指数分布からsize個サンプリングし、t1に代入します。 - サイクルヒットの待ち時間を、パラメータ
tau2の指数分布からsize個サンプリングし、t2に代入します。 - 関数は、これら二つの事象の待ち時間の合計を返します。
- ノーヒッターの待ち時間を、パラメータ
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def successive_poisson(tau1, tau2, size=1):
"""Compute time for arrival of 2 successive Poisson processes."""
# Draw samples out of first exponential distribution: t1
t1 = ____(____, ____)
# Draw samples out of second exponential distribution: t2
t2 = ____(____, ____)
return t1 + t2