Анализ выживаемости
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 | непараметрическая | Сравнение групп |
| exponential | log_rate | Постоянный риск |
| weibull | log_k, log_lambda | Монотонный риск |
| lognormal_aft | mu, log_sigma | Ускоренное время до отказа (AFT) |
| cox_ph | коэффициенты ковариат | Полупараметрическая, partial likelihood |
| IntervalCensoredWeibullAftModel | log_k, β0..p | Weibull AFT с ковариатами + интервальное цензурирование |
| IntervalCensoredWeibullModel | log_k, log_lambda | Вейбулл с интервальным цензурированием |
| IntervalCensoredExponentialModel | log_rate | Экспоненциальная (k=1) с интервальным цензурированием |
| IntervalCensoredLogNormalModel | mu, log_sigma | Логнормальная AFT с интервальным цензурированием |
Кросс-вертикальные применения
Одни и те же примитивы выживаемости работают в разных индустриях:
- Фарма — Конечные точки клинических испытаний, сравнение групп лечения, кривые КМ для FDA.
- Страхование — Анализ лапса полисов, таблицы смертности, развитие убытков.
- Эпидемиология — Популяционные когортные исследования, прогрессия заболеваний, оценка интервенций.
- Надёжность — Анализ отказов компонентов, оценка MTBF, моделирование гарантий.
- Подписки — Когортное удержание, модели риска оттока, каузальная оценка эффекта.
