なぜシミュレーションが必要なのでしょうか?
前のレッスンでは、dia の平均と共分散行列を使って多変量正規分布からのシミュレーションを行いました。ここでは、そのシミュレーション結果を使って興味深い問いに答えていきます。
「履歴データがあるのに、なぜシミュレーションを行うのでしょうか? データそのものから答えを出せないのですか?」と疑問に思うかもしれません。
とても良い質問です。モンテカルロ・シミュレーションは確率分布に基づいてモデル化を行い、多数のサンプルにより「確率分布全体」を観察できる点が特徴です。これは、履歴データの限られたデータ点数とは異なります。
たとえば、「このシミュレーションに登場する糖尿病患者の age 変数の0.1パーセンタイル(0.1%点)はいくつか?」といった問いを立てられます。履歴データの dia 自体ではこの問いに答えられません。レコード数が442しかなく、千分位(一千分の一の値)を計算できないためです。代わりに、モンテカルロ・シミュレーションの結果を活用できます。今まさにそれを行いましょう。
糖尿病データセットは DataFrame dia として読み込まれており、次のライブラリがインポート済みです:pandas は pd、numpy は np、scipy.stats は st。
この演習はコースの一部です
Pythonで学ぶモンテカルロ・シミュレーション
演習の手順
- シミュレーション結果の
tc変数について、0.1パーセンタイル(下位1000分の1)を計算してください。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
cov_dia = dia[["age", "bmi", "bp", "tc", "ldl", "hdl", "tch", "ltg", "glu"]].cov()
mean_dia = dia[["age", "bmi", "bp", "tc", "ldl", "hdl", "tch", "ltg", "glu"]].mean()
simulation_results = st.multivariate_normal.rvs(mean=mean_dia, size=10000, cov=cov_dia)
df_results = pd.DataFrame(simulation_results, columns=["age", "bmi", "bp", "tc", "ldl", "hdl", "tch", "ltg", "glu"])
# Calculate the 0.1st quantile of the tc variable
print(____)