為什麼需要模擬?
在上一個課節中,你使用 dia 的平均數與共變異數矩陣,進行了多變量常態分配的模擬。現在,你要用這些模擬結果來回答感興趣的問題!
或許你會問:既然有歷史資料,為什麼還要做模擬?難道不能直接用資料本身來回答問題嗎?
這是非常好的問題。Monte Carlo 模擬是以機率分配為基礎的建模方法。它會產生整個機率分配供你檢視(大量樣本),而不是只侷限於歷史資料中那有限的資料點數量。
例如,你可以問:在我們的模擬中,糖尿病患者的 age 變數,其第 0.1 百分位數是多少?用歷史資料 dia 本身沒辦法回答:因為它只有 442 筆紀錄,無法計算出第千分之一的位置。相反地,你可以利用 Monte Carlo 模擬的結果來回答這類問題——現在就來試試看!
糖尿病資料集已載入為 DataFrame dia,並且以下函式庫已為你匯入:將 pandas 命名為 pd、numpy 命名為 np,以及 scipy.stats 命名為 st。
本練習屬於課程
Python 的 Monte Carlo 模擬
練習說明
- 計算模擬結果中
tc變數的第 0.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(____)