NextStatNextStat

Анализ выживаемости

NextStat предоставляет непараметрические оценки, параметрические модели выживаемости и Cox Proportional Hazards — всё вычисляется через движок на Rust. Правое цензурирование поддерживается нативно. Те же примитивы работают для фармы, страхования, эпидемиологии, надёжности и подписочной аналитики.

Оценка Каплана-Мейера

Непараметрическая кривая выживаемости с дисперсией Гринвуда и log-log доверительными интервалами.

import nextstat

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

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

# Массивы по шагам: time, survival, ci_lower, ci_upper
for t, s, lo, hi in zip(km['time'], km['survival'],
                         km['ci_lower'], km['ci_upper']):
    print(f"  t={t:.1f}  S={s:.3f}  [{lo:.3f}, {hi:.3f}]")

Лог-ранг тест

Тест Мантеля-Кокса для сравнения распределений выживаемости 2+ групп.

lr = nextstat.log_rank_test(times, events, groups)

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

# Наблюдаемые vs ожидаемые по группам
for g, o, e in zip(lr['group_ids'], lr['observed'], lr['expected']):
    print(f"  группа {g}: наблюдаемых={o}, ожидаемых={e:.1f}")

Параметрические модели

import nextstat.survival as surv

# Экспоненциальная
fit = surv.exponential.fit(times, events, x)

# Вейбулла
fit = surv.weibull.fit(times, events, x)

# Логнормальная AFT
fit = surv.lognormal_aft.fit(times, events, x)

# Все возвращают ParametricSurvivalFit с .params, .se, .nll, .confint()

Пропорциональные риски Кокса (Cox PH)

fit = surv.cox_ph.fit(
    times, events, x,
    ties="efron",     # или "breslow"
    robust=True,      # "sandwich" стандартные ошибки
)

print(fit.params)                       # log(hazard ratio)
print(fit.robust_se)                    # робастные стандартные ошибки
print(fit.hazard_ratio_confint())       # доверительный интервал для exp(coef)
print(fit.confint(robust=True))         # доверительный интервал коэффициентов

Остатки Шенфельда

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

Интервально-цензурированные модели

NextStat поддерживает точное, правое, левое и интервальное цензурирование для параметрических моделей.Interval-Censored Weibull AFT включает ковариаты: S(t|x) = exp(-(t/λ(x))^k) где log(λi) = xiT β. Критично для авиации/надёжности, где время отказа известно лишь в пределах инспекционных интервалов.

import nextstat

# censor_type: 0=exact, 1=right, 2=left, 3=interval
model = nextstat.IntervalCensoredWeibullAftModel(
    time_lower, time_upper, censor_type, covariates
)
result = nextstat.fit(model)

print(f"Форма k = {result.parameters[0]:.3f}")
print(f"Эффекты ковариат (beta): {result.parameters[1:]}")
print(f"Предупреждения: {result.warnings}")  # проверки идентифицируемости

Более простые 2-параметрические варианты (без ковариат):

# Вейбулл (IC, без ковариат)
m = nextstat.IntervalCensoredWeibullModel(time_lower, time_upper, censor_type)

# Экспоненциальная (IC, k=1)
m = nextstat.IntervalCensoredExponentialModel(time_lower, time_upper, censor_type)

# Логнормальная (IC)
m = nextstat.IntervalCensoredLogNormalModel(time_lower, time_upper, censor_type)

CLI

# Каплан-Мейер из JSON
nextstat survival km -i data.json --conf-level 0.95

# Лог-ранг тест
nextstat survival log-rank-test -i data.json

# Cox PH фит
nextstat survival cox-ph-fit -i data.json

# Weibull AFT с интервальным цензурированием
nextstat survival weibull-aft -i data.json

Доступные модели

МодельПараметрыПрименение
kaplan_meierнепараметрическаяКривая выживаемости
log_rank_testнепараметрическаяСравнение групп
exponentiallog_rateПостоянный риск
weibulllog_k, log_lambdaМонотонный риск
lognormal_aftmu, log_sigmaУскоренное время до отказа (AFT)
cox_phкоэффициенты ковариатПолупараметрическая, partial likelihood
IntervalCensoredWeibullAftModellog_k, β0..pWeibull AFT с ковариатами + интервальное цензурирование
IntervalCensoredWeibullModellog_k, log_lambdaВейбулл с интервальным цензурированием
IntervalCensoredExponentialModellog_rateЭкспоненциальная (k=1) с интервальным цензурированием
IntervalCensoredLogNormalModelmu, log_sigmaЛогнормальная AFT с интервальным цензурированием

Кросс-вертикальные применения

Одни и те же примитивы выживаемости работают в разных индустриях:

  • ФармаКонечные точки клинических испытаний, сравнение групп лечения, кривые КМ для FDA.
  • СтрахованиеАнализ лапса полисов, таблицы смертности, развитие убытков.
  • ЭпидемиологияПопуляционные когортные исследования, прогрессия заболеваний, оценка интервенций.
  • НадёжностьАнализ отказов компонентов, оценка MTBF, моделирование гарантий.
  • ПодпискиКогортное удержание, модели риска оттока, каузальная оценка эффекта.