Skip to content
New Workbook
Sign up
Project: Hypothesis Testing in Healthcare

Исследование гипотез в сфере здравоохранения: безопасность лекарств

Фармацевтическая компания GlobalXYZ только что завершила рандомизированное контролируемое испытание лекарства. Чтобы обеспечить прозрачность и воспроизводимость результатов лекарства, они (GlobalXYZ) предоставили набор данных вашей организации, некоммерческой организации, которая в первую очередь фокусируется на безопасности лекарств.

Предоставленный набор данных содержал информацию о пяти побочных эффектах, демографические данные, жизненные показатели и т.д. Ваша организация в первую очередь заинтересована в побочных реакциях на лекарство. Ей хочется знать, имеют ли побочные реакции, если таковые имеются, значительные пропорции. Она просила вас изучить и ответить на некоторые вопросы по данным.

Набор данных drug_safety.csv был получен благодаря Hbiostat и кафедре биостатистики Вандербильтского университета. В нем содержалась информация о пяти побочных эффектах: головной боли, боли в животе, диспепсии, инфекции верхних дыхательных путей, хроническом обструктивном заболевании легких (ХОЗЛ), демографические данные, жизненные показатели, лабораторные измерения и т.д. Соотношение наблюдений для лекарства к наблюдениям для плацебо составляет 2 к 1.

Для этого проекта набор данных был изменен так, чтобы отражать наличие и отсутствие побочных эффектов adverse_effects и количество побочных эффектов у одного человекаnum_effects.

The columns in the modified dataset are:

КолонкаОписание
sexПол человека
ageВозраст человека
weekНеделя испытания лекарства
trxГруппы лечения (Лекарство) и контроля (Плацебо)
wbcКоличество белых кровяных телец
rbcКоличество красных кровяных телец
adverse_effectsНаличие хотя бы одного побочного эффекта
num_effectsКоличество побочных эффектов, испытанных одним человеком

Оригинальный набор данных можно найти здесь.

Ваша организация попросила вас изучить и ответить на некоторые вопросы по собранным данным. Смотрите инструкции к проекту.

Инструкции:

  • Определите, значительно ли различается доля побочных эффектов между группами лекарств и плацебо, сохранив p-значение в переменной two_sample_p_value.

  • Выясните, не зависит ли количество неблагоприятных эффектов от групп лечения и контроля, сохранив переменную num_effects_p_value, содержащую p-значение.

  • Проверьте, существует ли значимая разница между возрастом групп лекарств и плацебо, сохранив p-значение вашего теста в переменной age_group_effects_p_value.

# Импорт пакетов
import numpy as np
import pandas as pd
from statsmodels.stats.proportion import proportions_ztest
import pingouin
import seaborn as sns
import matplotlib.pyplot as plt

# Загрузка данных
drug_safety = pd.read_csv("drug_safety.csv")
drug_safety
drug_safety.info()
# Подсчет значений побочных эффектов
adv_eff_by_trx = drug_safety.groupby("trx").adverse_effects.value_counts()
adv_eff_by_trx
# Вычисление общего количества случаев в каждой группе
adv_eff_by_trx_totals = adv_eff_by_trx.groupby("trx").sum()
adv_eff_by_trx_totals
# Подготовка данных для z-теста
# Создание массивов с количеством "Yes" (наличие побочных эффектов) для каждой группы и общим количеством наблюдений в каждой группе для проведения z-теста.
yeses = [adv_eff_by_trx["Drug"]["Yes"], adv_eff_by_trx["Placebo"]["Yes"]]
n = [adv_eff_by_trx_totals["Drug"], adv_eff_by_trx_totals["Placebo"]]
yeses
n
# Z-тест для сравнения пропорций
# Выполнение z-теста для сравнения пропорций побочных эффектов между двумя группами (Лекарство и Плацебо), и извлечение p-значения из результатов.

two_sample_results = proportions_ztest(yeses, n)
two_sample_p_value = two_sample_results[1]
two_sample_p_value
# Тест на независимость
# Проведение хи-квадрат теста на независимость между количеством побочных эффектов (num_effects) и группой лечения (trx).

num_effects_groups = pingouin.chi2_independence(data=drug_safety, x="num_effects", y="trx")
num_effects_p_value = num_effects_groups[2]["pval"][0]
num_effects_p_value
# Гистограмма возраста участников
# Визуализация распределения возраста участников с разделением по группам лечения с помощью гистограммы.b

sns.histplot(data=drug_safety, x="age", hue="trx")
# Тест на нормальность распределения
# Проверка распределения возраста на нормальность для каждой группы лечения.

normality = pingouin.normality(data=drug_safety, dv='age', group='trx', method='shapiro', alpha=0.05)
normality
# Сравнение возраста в группах
# Выборка возраста участников в каждой группе и проведение двухстороннего теста Манна-Уитни U для сравнения возрастных групп, с последующим извлечением p-значения.

age_trx = drug_safety.loc[drug_safety["trx"] == "Drug", "age"]
age_placebo = drug_safety.loc[drug_safety["trx"] == "Placebo", "age"]
age_group_effects = pingouin.mwu(age_trx, age_placebo)
age_group_effects_p_value = age_group_effects["p-val"]
age_group_effects_p_value