NextStatNextStat

Быстрый старт: Выживаемость и Фарма

От установки до первого Cox PH за 3 минуты

Этот гайд проведёт вас через анализ выживаемости в NextStat — кривые Каплана-Мейера, лог-ранк тест и модель Кокса — на Python. Никаких ROOT или ФВЭ-знаний не требуется.

1. Установка

pip install nextstat

2. Подготовка данных

Для анализа выживаемости нужны три массива: времена наблюдений, индикаторы событий (1 = событие, 0 = цензурирование) и опционально матрица ковариат.

import numpy as np

# Пример: 200 пациентов, 3 ковариаты
np.random.seed(42)
n = 200
times  = np.random.exponential(10, n)
events = np.random.binomial(1, 0.7, n)
x      = np.random.randn(n, 3)  # возраст, дозировка, биомаркер

3. Кривая Каплана-Мейера

import nextstat

km = nextstat.kaplan_meier(times, events, conf_level=0.95)

print(f"N = {km['n']}, событий = {km['n_events']}")
print(f"Медианная выживаемость: {km['median']:.2f}")

# Шаги кривой с доверительными интервалами
for t, s, lo, hi in zip(km['time'][:5], km['survival'][:5],
                         km['ci_lower'][:5], km['ci_upper'][:5]):
    print(f"  t={t:.2f}  S(t)={s:.3f}  95% ДИ [{lo:.3f}, {hi:.3f}]")

4. Лог-ранк тест

Сравнение выживаемости между двумя группами (напр. лечение vs контроль).

groups = np.where(x[:, 1] > 0, "treatment", "control")
lr = nextstat.log_rank_test(times, events, groups)

print(f"chi² = {lr['chi_squared']:.2f}, p = {lr['p_value']:.4f}")

5. Модель Кокса (Cox PH)

import nextstat.survival as surv

fit = surv.cox_ph.fit(
    times, events, x,
    ties="efron",
    robust=True,
)

print("Лог-отношения рисков:", fit.params)
print("Робастные SE:",         fit.robust_se)
print("ДИ для hazard ratios:")
print(fit.hazard_ratio_confint())

6. Диагностика

# Проверка предположения пропорциональных рисков
residuals = surv.schoenfeld_residuals(fit)

# Индекс конкордации
print(f"C-index: {fit.concordance:.3f}")

Следующие шаги