为什么需要进行模拟?
在上一节课中,您使用 dia 的均值和协方差矩阵进行了多元正态分布的模拟。现在,您将基于模拟结果来回答一些关键问题!
您可能会问:既然我们已经有历史数据了,为什么还要做模拟?难道不能直接用数据本身来回答问题吗?
这个问题非常好。Monte Carlo 模拟基于概率分布建模,可以得到完整的概率分布供分析(大量样本),而不是受限于历史数据中有限的观测点数量。
例如,您可以问:在我们的模拟中,糖尿病患者 age 变量的第 0.1 分位是多少?对于历史数据 dia 本身,我们无法回答这个问题:因为它只有 442 条记录,无法计算到第一千分位的数值。相反,您可以利用 Monte Carlo 模拟的结果来回答,这正是您接下来要做的!
糖尿病数据集已作为 DataFrame dia 加载,且已为您导入以下库:将 pandas 导入为 pd,将 numpy 导入为 np,以及将 scipy.stats 导入为 st。
本练习是课程的一部分
Python 中的蒙特卡洛模拟
练习说明
- 计算模拟结果中
tc变量的第 0.1 分位(即最底部第 1,000 分位)。
交互式实操练习
通过完成这段示例代码来试试这个练习。
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(____)