Чтобы сравнить кривые выживаемости между группами, используйте Log Rank Test – один из самых популярных методов в анализе выживания. Этот тест проверяет нулевую гипотезу о том, что различий между группами нет. В Python его легко реализовать с помощью библиотеки lifelines, которая предоставляет готовые инструменты для работы с данными временных событий.
Для начала установите lifelines командой pip install lifelines. Затем загрузите данные, например, с помощью pandas. Убедитесь, что ваши данные содержат два столбца: время до события и индикатор события (1 – событие произошло, 0 – цензурирование). После этого разделите данные на группы, которые хотите сравнить, и примените функцию logrank_test из lifelines.
Пример кода выглядит так:
from lifelines.statistics import logrank_test results = logrank_test(group1_times, group2_times, event_observed_A=group1_events, event_observed_B=group2_events) print(results.p_value)
Log Rank Test особенно полезен в медицинских исследованиях, где нужно оценить эффективность лечения или влияние факторов риска. С его помощью вы можете быстро получить ответы на ключевые вопросы, связанные с анализом выживания, и визуализировать результаты с помощью кривых Каплана-Мейера.
Подготовка данных для Log Rank Test
Убедитесь, что ваши данные содержат три ключевых столбца: время до события, статус события и группирующую переменную. Время до события (time) должно быть числовым и отражать продолжительность наблюдения. Статус события (event) указывает, произошло ли событие (1) или наблюдение было цензурировано (0). Группирующая переменная (group) определяет, к какой категории относится наблюдение.
Проверьте данные на пропущенные значения. Удалите строки с пропусками или заполните их, если это возможно. Например, для числовых переменных используйте медиану, а для категориальных – наиболее часто встречающееся значение.
Преобразуйте категориальные переменные в числовой формат, если это необходимо. Например, закодируйте группы с помощью чисел (0, 1, 2 и т.д.). Это упростит анализ и предотвратит ошибки в расчетах.
Убедитесь, что данные соответствуют предположениям Log Rank Test. Время до события должно быть непрерывным, а группы должны быть независимыми. Если данные содержат выбросы, рассмотрите их удаление или использование методов, устойчивых к аномалиям.
Перед запуском теста визуализируйте кривые выживаемости для каждой группы. Это поможет оценить различия и проверить, насколько данные подходят для анализа. Используйте библиотеку lifelines
для построения графиков Kaplan-Meier.
Если данные содержат несколько групп, убедитесь, что каждая группа имеет достаточное количество наблюдений. Малые группы могут привести к неточным результатам. В таких случаях рассмотрите объединение схожих категорий.
Форматирование данных о выживании
Для анализа выживания данные должны быть структурированы в виде таблицы с тремя основными столбцами: время, событие и группа. Время указывает продолжительность наблюдения, событие – произошло ли интересующее событие (1) или данные цензурированы (0), а группа – категориальная переменная для сравнения.
Пример таблицы может выглядеть так:
Время | Событие | Группа |
---|---|---|
120 | 1 | A |
90 | 0 | B |
Используйте библиотеку pandas для создания и обработки таких таблиц. Убедитесь, что типы данных соответствуют ожидаемым: время – числовой, событие – бинарный, группа – категориальный.
Если данные содержат пропуски, примените методы их обработки, например, удаление строк или заполнение средними значениями. Это предотвратит ошибки при анализе.
Для визуализации данных используйте matplotlib или seaborn. Например, постройте кривые Каплана-Мейера для каждой группы, чтобы оценить различия в выживаемости.
Перед анализом проверьте данные на корректность: убедитесь, что временные значения неотрицательны, а события закодированы правильно. Это минимизирует ошибки и повысит точность результатов.
Определение переменной времени и события
Для анализа выживания четко определите две ключевые переменные: время и событие. Переменная времени указывает на продолжительность наблюдения до наступления события или окончания исследования. Например, это может быть количество дней, месяцев или лет с момента начала наблюдения. Используйте точные единицы измерения, чтобы избежать путаницы.
Переменная события отражает, произошло ли интересующее событие (например, смерть, рецидив заболевания) в течение периода наблюдения. Обычно она кодируется как 1 (событие произошло) или 0 (событие не произошло, данные цензурированы). Убедитесь, что данные о событиях собраны корректно и не содержат пропусков.
Проверьте данные на согласованность. Например, если время наблюдения равно нулю, событие не должно быть зафиксировано. Используйте функции в Python, такие как pd.isnull()
, чтобы выявить пропущенные значения и устранить их до анализа.
Для удобства работы с данными в Pandas создайте отдельные столбцы для времени и события. Например:
import pandas as pd
data = pd.DataFrame({
'time': [100, 200, 150, 300],
'event': [1, 0, 1, 0]
})
Убедитесь, что данные соответствуют требованиям Log Rank Test. Например, если вы сравниваете две группы, каждая из них должна содержать достаточное количество событий для достоверного анализа. Проверьте распределение времени и событий с помощью визуализации, например, с использованием библиотеки Matplotlib или Seaborn.
Обработка пропущенных значений в данных
Пропущенные значения в данных могут повлиять на точность анализа выживания. Начните с проверки доли пропусков в каждом столбце. Если пропуски составляют более 50%, удалите этот столбец – он не принесет пользы для анализа.
- Удаление строк: Если пропуски редки и не превышают 5% данных, удалите строки с пропусками. Используйте метод
dropna()
в Pandas. - Замена на среднее или медиану: Для числовых данных замените пропуски средним или медианным значением столбца. Используйте
fillna()
с параметромmean()
илиmedian()
. - Категориальные данные: Для категориальных переменных замените пропуски на наиболее часто встречающееся значение с помощью
mode()
.
Если пропуски зависят от других переменных, используйте методы интерполяции или модели машинного обучения для их заполнения. Например, библиотека sklearn.impute.IterativeImputer
позволяет предсказать пропущенные значения на основе остальных данных.
- Разделите данные на обучающую и тестовую выборки.
- Обучите модель на данных без пропусков.
- Используйте модель для заполнения пропусков в тестовой выборке.
После обработки проверьте, как изменения повлияли на распределение данных. Используйте визуализацию, например гистограммы или boxplot, чтобы убедиться, что данные остались репрезентативными.
Практическое применение Log Rank Test в Python
Для выполнения Log Rank Test в Python используйте библиотеку lifelines
. Установите её командой pip install lifelines
. Создайте объект KaplanMeierFitter
для каждой группы данных и сравните их с помощью функции logrank_test
.
- Загрузите данные с временем выживания и статусом событий (например,
time
иevent
). - Разделите данные на группы, например, по признаку лечения или другим категориям.
- Постройте кривые Каплана-Мейера для каждой группы с помощью
KaplanMeierFitter
. - Сравните кривые с помощью
logrank_test
, передав времена и статусы для обеих групп.
Пример кода:
from lifelines import KaplanMeierFitter, logrank_test
# Пример данных
time_group1 = [10, 20, 30, 40]
event_group1 = [1, 1, 0, 1]
time_group2 = [15, 25, 35, 45]
event_group2 = [1, 0, 1, 1]
# Log Rank Test
results = logrank_test(time_group1, time_group2, event_observed_A=event_group1, event_observed_B=event_group2)
print(results.p_value) # Проверка значимости различий
Если p-значение меньше 0.05, различия между группами статистически значимы. Это указывает на то, что фактор, по которому разделены группы, влияет на выживаемость.
Для визуализации результатов используйте метод plot
объекта KaplanMeierFitter
. Это поможет наглядно сравнить кривые выживаемости:
kmf1 = KaplanMeierFitter()
kmf1.fit(time_group1, event_group1, label="Группа 1")
kmf2 = KaplanMeierFitter()
kmf2.fit(time_group2, event_group2, label="Группа 2")
kmf1.plot()
kmf2.plot()
Такой подход позволяет быстро оценить различия в выживаемости и принять обоснованные решения на основе данных.
Использование библиотеки Lifelines для анализа
Установите библиотеку Lifelines с помощью команды pip install lifelines
, чтобы начать работу с анализом выживаемости. Lifelines предоставляет простой интерфейс для выполнения Log Rank Test и других методов анализа.
Для выполнения Log Rank Test используйте функцию logrank_test
. Пример:
from lifelines.statistics import logrank_test
results = logrank_test(durations_A, durations_B, event_observed_A, event_observed_B)
print(results.p_value)
Здесь durations_A
и durations_B
– массивы времени наблюдения для двух групп, а event_observed_A
и event_observed_B
– массивы, указывающие, произошло ли событие (например, смерть или отказ) в каждой группе.
Для визуализации кривых выживаемости примените метод KaplanMeierFitter
. Пример:
from lifelines import KaplanMeierFitter
kmf = KaplanMeierFitter()
kmf.fit(durations_A, event_observed_A, label='Группа A')
kmf.plot_survival_function()
Этот код построит кривую выживаемости для группы A. Добавьте аналогичный код для группы B, чтобы сравнить их на одном графике.
Lifelines также поддерживает анализ с учетом ковариат через модели CoxPH. Для этого используйте CoxPHFitter
:
from lifelines import CoxPHFitter
cph = CoxPHFitter()
cph.fit(df, duration_col='duration', event_col='event')
cph.print_summary()
Здесь df
– DataFrame с данными, где duration_col
и event_col
указывают на столбцы с временем и событием соответственно.
Библиотека Lifelines упрощает анализ выживаемости, предоставляя готовые инструменты для выполнения Log Rank Test, визуализации данных и работы с моделями. Используйте её для быстрого и точного анализа.
Шаги для выполнения теста и интерпретация результатов
Для выполнения Log Rank Test в Python установите библиотеку lifelines
, если она еще не установлена. Используйте команду pip install lifelines
в терминале.
Создайте объект KaplanMeierFitter
для каждой группы данных. Оцените кривые выживаемости с помощью метода fit
, передав временные данные и статус событий. Например:
from lifelines import KaplanMeierFitter
kmf = KaplanMeierFitter()
kmf.fit(durations, event_observed=events, label='Группа 1')
Для сравнения кривых выживаемости используйте функцию logrank_test
из библиотеки lifelines.statistics
. Передайте временные данные и статусы событий для обеих групп:
from lifelines.statistics import logrank_test
results = logrank_test(durations_A, durations_B, event_observed_A=events_A, event_observed_B=events_B)
Результаты теста включают статистику Log Rank и p-значение. Если p-значение меньше 0.05, различия между группами считаются статистически значимыми.
Интерпретируйте результаты следующим образом:
p-значение | Интерпретация |
---|---|
p < 0.05 | Существуют значимые различия в выживаемости между группами. |
p ≥ 0.05 | Различия в выживаемости не являются статистически значимыми. |
Для визуализации кривых выживаемости используйте метод plot
объекта KaplanMeierFitter
. Это поможет наглядно сравнить результаты:
kmf.plot()
Убедитесь, что данные корректно подготовлены: временные значения должны быть положительными, а статусы событий – бинарными (1 для события, 0 для цензурирования).
Визуализация кривых выживания с помощью Matplotlib
Для построения кривых выживания в Python используйте библиотеку Matplotlib вместе с KaplanMeierFitter из lifelines. Сначала установите необходимые библиотеки, если они еще не установлены:
pip install matplotlib lifelines
Создайте объект KaplanMeierFitter и вызовите метод fit, передав данные о времени и событии. Затем используйте метод plot_survival_function для визуализации кривой. Вот пример кода:
from lifelines import KaplanMeierFitter
import matplotlib.pyplot as plt
# Пример данных
time = [5, 10, 15, 20, 25]
event = [1, 1, 0, 1, 0]
# Создание и обучение модели
kmf = KaplanMeierFitter()
kmf.fit(time, event)
# Построение кривой выживания
kmf.plot_survival_function()
plt.title('Кривая выживания')
plt.xlabel('Время')
plt.ylabel('Вероятность выживания')
plt.show()
Для сравнения нескольких кривых выживания, например, для разных групп, используйте цикл. Добавьте параметр label для каждой группы и вызовите legend для отображения легенды:
groups = ['Группа A', 'Группа B']
for group in groups:
kmf.fit(time[group], event[group], label=group)
kmf.plot_survival_function()
plt.title('Сравнение кривых выживания')
plt.xlabel('Время')
plt.ylabel('Вероятность выживания')
plt.legend()
plt.show()
Если требуется настроить внешний вид графика, используйте параметры Matplotlib, такие как color, linestyle и linewidth. Например:
kmf.plot_survival_function(color='blue', linestyle='--', linewidth=2)
Для экспорта графика в файл используйте метод savefig:
plt.savefig('survival_curve.png', dpi=300)
В таблице ниже приведены основные параметры для настройки кривых выживания:
Параметр | Описание | Пример |
---|---|---|
color | Цвет линии | color=’red’ |
linestyle | Стиль линии | linestyle=’dotted’ |
linewidth | Толщина линии | linewidth=1.5 |
label | Метка для легенды | label=’Группа A’ |
Эти методы помогут вам создать информативные и наглядные кривые выживания, которые легко интерпретировать.