Навіщо нам потрібні симуляції?
У попередньому уроці ви виконали багатовимірний нормальний розподіл, використавши середні значення та коваріаційну матрицю dia. Тепер ви відповісте на запитання, що вас цікавлять, використовуючи змодельовані результати!
Може виникнути запитання: навіщо ми робимо симуляції, якщо маємо історичні дані? Хіба не можна просто використати самі дані, щоб відповісти на потрібні запитання?
Це слушне запитання. Симуляції Монте-Карло ґрунтуються на моделюванні за допомогою імовірнісних розподілів, які дають змогу отримати весь розподіл імовірностей для аналізу (велику кількість вибірок), а не обмежену кількість спостережень, доступних в історичних даних.
Наприклад, можна запитати: який 0,1-й квантиль змінної age для пацієнтів із діабетом у нашій симуляції? Ми не можемо відповісти на це запитання, спираючись лише на історичні дані dia: оскільки в них лише 442 записи, ми не можемо обчислити тисячне за величиною значення. Натомість можна використати результати симуляції Монте-Карло — саме це ви зараз і зробите!
Набір даних про діабет завантажено як датафрейм dia, а також попередньо імпортовано такі бібліотеки: pandas як pd, numpy як np і scipy.stats як st.
Ця вправа є частиною курсу
Моделювання Монте-Карло в Python
Інструкції до вправи
- Обчисліть 0,1-й квантиль (нижню тисячну частку) змінної
tcу змодельованих результатах.
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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(____)