На этой странице

Анализ времени до события — методические заметки

Здесь собраны решения, лежащие в основе модуля анализа времени до события: какие оценки, пороги, запреты и запасные варианты стоят за каждой карточкой и какими числами они подтверждаются. Все числа получены на таблице испытания ovarian, приведённой на странице понятий анализа выживаемости. Порядок разделов тот же, что в руководстве.

Роли переменных

Пять обозначений цензурирования назначаются заранее, а остальные уровни получают роли причин в порядке сортировки. 0, false, no, censored и alive (без учёта регистра и пробелов по краям) — обычные способы записать «ничего не произошло» в данных о выживаемости: кодировка 0/1 большинства пакетов, yes/no и alive/dead в выгрузках из регистров. Поэтому файл в любой из этих кодировок запускается без перекодирования. Любой другой уровень считается событием, и поскольку модуль поддерживает конкурирующие риски, по умолчанию уровни получают разные причины, а не сводятся к одной роли Событие. Уровни сортируются (как числа, если все уровни распознаются как числа, так что 2 идёт раньше 10, иначе по правилам локали) и в этом порядке получают роли события, причины 2, причины 3 и причины 4. Пятый и следующие сводятся к причине 4, поскольку ядра конкурирующих рисков принимают не больше четырёх причин. Двухуровневый индикатор поэтому даёт одну роль цензурирования и одну роль события, а трёхуровневый код причины — две причины, и методы конкурирующих рисков для такого файла открываются без единого щелчка. Если многоуровневый код нужно рассматривать как одно событие, лишние уровни переназначаются на Событие. Назначения хранятся для каждой переменной события, чтобы при переключении на другую переменную и обратно они не терялись.

Проверка. В таблице ovarian уровню alive переменной status заранее назначается роль «Цензурировано», уровню died — роль «Событие», и расчёт сообщает о 12 событиях у 26 женщин.

Назначение ролей ограничено 20 различными уровнями. Роль назначается в отдельной строке для каждого уровня, а индикатор события принимает немного дискретных значений. Переменная с большим числом уровней почти всегда оказывается непрерывной и выбранной не в то поле (время наблюдения, идентификатор), а сотня выпадающих списков не помогла бы и вряд ли была бы заполнена осмысленно. Это ограничение интерфейса, а не статистическое правило: сообщение называет число уровней и предлагает выбрать дискретный индикатор или перекодировать переменную.

Время вхождения учитывается там, где оценка принимает отклик в форме процесса счёта, игнорируется с предупреждением там, где не принимает, и отклоняется там, где пропуск остался бы незамеченным. survfit, coxph, survreg и eha::phreg принимают Surv(entry, time, event), поэтому кривые, модели Кокса, параметрические модели и подгонки по причинам в конкурирующих рисках учитывают отложенный вход. survdiff не поддерживает Surv в форме процесса счёта: одни его версии незаметно принимают столбец вхождения за время наблюдения, другие завершаются ошибкой. Поэтому лог-ранговое семейство и попарные критерии всегда используют Surv с двумя аргументами, а карточка предупреждает, что критерий не учёл время вхождения, хотя кривые его учли. У cmprsk::cuminc нет аргумента для левого усечения, поэтому кумулятивная инцидентность игнорирует переменную и предупреждает, что отсчёт для всех наблюдений шёл от нулевого момента. cmprsk::crr время вхождения тоже не принимает, но рядом с подгонкой Файна — Грея нет кривой, по которой расхождение было бы видно, поэтому такое сочетание отклоняется до запуска, а не выводится без поправки. В Surv(type = "interval2") время левого усечения передать вообще нельзя, поэтому на любом пути с интервальным цензурированием такое сочетание отклоняется. Строка, у которой время вхождения не строго меньше времени события или цензурирования, исключается в JavaScript ещё до передачи данных в R: Surv превращает её в NA лишь с предупреждением в консоли R, и иначе исключение никак не отразилось бы на карточке.

Группирующая переменная служит стратой там, где оценка стратифицирует, факторной ковариатой там, где не может, и игнорируется там, где модель незаметно поглотила бы её. coxph принимает strata(), что даёт каждому уровню свой базовый риск и не оценивает для него коэффициента. Для модели Кокса это правильный способ учесть группу: от группы, риск которой не пропорционален рискам остальных, пропорциональности тогда и не требуется. У survreg и phreg страт нет, поэтому параметрическая подгонка добавляет переменную в правую часть как factor(grp) и тратит по коэффициенту на каждый уровень после первого, что учитывает проверка EPV. icenReg::ic_sp принимает strata() в формуле, но без ошибки поглощает её как обычную ковариату. Поэтому путь Кокса с интервальным цензурированием явно добавляет переменную как фактор и выводит об этом примечание, чтобы стратифицированной не сочли подгонку, в которой стратификации не было. У cmprsk::crr нет ни страт, ни собственной обработки факторов, поэтому модель Файна — Грея игнорирует переменную с примечанием, а руководство советует добавить её в ковариаты. Если переменная уже входит в модель, ковариата с тем же именем отклоняется до запуска. Рядом со strata() её коэффициент неотличим от страт и получается NA, а рядом с factor(grp) это один и тот же член дважды, и одна из копий тоже даёт NA. Модель Файна — Грея переменную не использует и принимает её как ковариату.

Список ковариат скрывается для методов, строящих только кривые, а не остаётся на экране, где выбор пропадал бы незаметно. Непараметрические кривые и кумулятивная инцидентность не передают ковариат в свои ядра, поэтому ковариата, выбранная при этих методах, осталась бы неиспользованной без всякого предупреждения. Скрытая секция показывает это без всяких сообщений, а выбор сохраняется и восстанавливается при переключении на регрессионный метод.

Цензурирование

Интервальное цензурирование переводит каждый метод на другую оценку, а методы, для которых её нет, блокируются до запуска. В survfit нет непараметрической оценки для интервально-цензурированных данных, поэтому кривая выживаемости строится по НПМП Тёрнбулла из Icens::EMICM, отдельно для каждой страты. У coxph нет частичного правдоподобия для интервалов, поэтому модель Кокса заменяется icenReg::ic_sp, полупараметрической моделью пропорциональных рисков, в которой все стандартные ошибки получены бутстрэпом. survreg напрямую принимает Surv(lower, upper, type = "interval2"), так что семейства AFT подгоняются как обычно. eha::phreg не принимает интервально-цензурированный отклик, поэтому модель Гомпертца при прямом выборе отклоняется, а из режима Сравнить все исключается. У cmprsk пути для интервального цензурирования нет вовсе, поэтому при выборе кумулятивной инцидентности или регрессии конкурирующих рисков пункт Интервальное цензурирование отключён, а список возвращается к правому цензурированию: запрет срабатывает на самом поле, а не сообщением после Рассчитать. Строка с событием, у которой верхняя граница пропущена или меньше нижней, исключается до передачи данных в R, поскольку interval2 принял бы её за другой тип цензурирования. Верхняя граница цензурированной строки задаётся как NA, и ядра переводят её в Inf.

НПМП Тёрнбулла даёт только кривую и медиану. Icens::EMICM возвращает массу на каждом интервале носителя, но не дисперсию, поэтому доверительная полоса не рисуется, что бы ни было выбрано в переключателе. Кумулятивный риск был бы −log S ступенчатой функции, определённой только на этих интервалах, поэтому он не строится. У survdiff нет формы для интервального цензурирования, и сравнение групп не выполняется, а у summary(fit, times = …) нет аналога в Icens, так что нет и таблицы временных точек. Примечание на карточке называет первые три пункта. Медиана — правый конец первого интервала носителя с S ≤ 0.5, без интерполяции, поскольку НПМП определена только на своём носителе. Страта, для которой EM-итерации не сошлись, называется в предупреждении, и кривой у неё нет.

Методы анализа

Методы конкурирующих рисков открываются при двух нецензурированных ролях и принимают не больше четырёх причин. Анализу конкурирующих рисков по определению нужны хотя бы две причины, поэтому оба метода недоступны в выпадающем списке, пока в таблице ролей нет двух нецензурированных ролей, а обработчики проверяют это ещё раз на случай выбора с клавиатуры. Предел в четыре причины задан списком ролей, где есть «Событие» и три пронумерованные причины: при кодировании причин каждая нецензурированная роль получает для cmprsk целое число от 1 до 4, и для пятой причины понадобилась бы пятая роль.

Параметры выбранного метода

Флеминг — Харрингтон — это type = "fleming-harrington" в survfit, а график кумулятивного риска при любой оценке строится по fit$cumhaz. Выбор оценки передаётся в survfit аргументом type, который меняет только столбец выживаемости: fit$cumhaz в обоих случаях — оценка Нельсона — Аалена, а fit$std.chaz — её стандартная ошибка. Поэтому график кумулятивного риска и его полоса одинаковы при любой оценке выживаемости. Полоса кумулятивного риска строится по std.chaz, чтобы она была центрирована на изображённой кривой, а не пересчитывалась из полосы выживаемости.

Проверка. В таблице ovarian для схемы A на 638-й день оценка Нельсона — Аалена H(t) равна 0.787, а оценка Каплана — Мейера S(t) — 0.431. Оценка Флеминга — Харрингтона exp(−0.787) = 0.455 лежит выше, как и предсказывает расчёт на странице понятий.

Три веса — это ρ функции survdiff, попарные критерии повторяют survdiff для каждой пары с тем же ρ, а поправка следует глобальной настройке, включая «Нет». Семейство G-ρ Харрингтона и Флеминга взвешивает каждый момент события величиной S(t)^ρ: при ρ = 0 это лог-ранговый критерий, при ρ = 1 — обобщение критерия Вилкоксона по Пето и Пето, а ρ = 0.5 — компромисс, предложенный теми же авторами. Поэтому поле предлагает ровно эти три веса и отказ от критерия. При трёх и более группах общий критерий показывает лишь, что кривые где-то различаются, поэтому каждая пара проверяется заново: данные ограничиваются двумя группами, и вызывается survdiff с тем же ρ. Нескорректированные p-значения проходят через p.adjust с методом, указанным в настройке поправки на множественные сравнения, как и во всех остальных модулях. Значение Нет тоже соблюдается, а не подменяется: таблица выводится без поправки, и предупреждение сообщает, что семейство осталось нескорректированным. Поправка, применённая вопреки отключённой настройке, дала бы результат, который пользователь не сможет воспроизвести. Разности RMST образуют отдельное семейство и корректируются отдельно, поскольку отвечают не на тот вопрос, что ранговые критерии.

Проверка. В таблице ovarian лог-ранговый критерий для схемы A против B даёт χ²(1) = 1.06, p = 0.30, а критерий Пето — Пето — χ²(1) = 1.68, p = 0.19: критерий с большим весом ранних событий реагирует на пять ранних смертей в группе A.

Пустое поле временных точек не даёт таблицы, а запрошенный момент за пределами наблюдения страты переносится вперёд и приглушается. Ядро строит таблицу, только когда моменты заданы. Квартили вместо пустого поля не подставляются: три незапрошенные строки на страту появлялись бы при каждом запуске, а моменты, где S пересекает 0.75, 0.5 и 0.25, относятся к строке медианы и к кривой. summary(fit, times, extend = TRUE) используется затем, чтобы момент после последнего наблюдения страты всё же давал строку с последней оценкой, перенесённой вперёд. На карточке такая строка отмечена и приглушена, поскольку значение в ней не наблюдалось. Значения разбираются и по пробелам, и по запятым, потому что «12, 24» пользователь вводит, не задумываясь, а разбиение только по пробелам превратило бы все значения, кроме последнего, в NaN. Для оценки Тёрнбулла таблица не строится.

Метод Эфрона — вариант обработки совпадений по умолчанию. Он же используется по умолчанию в coxph и подходит почти для любых данных: он хорошо приближает точное частичное правдоподобие при ничтожных вычислительных затратах, тогда как более простое приближение Бреслоу смещено к нулю, когда совпадений много, а точный метод требует много времени. Все три варианта предлагаются потому, что для публикации может понадобиться воспроизвести результат пакета, где по умолчанию используется метод Бреслоу, а точный метод нужен для редких данных в дискретном времени, где совпадения — правило.

Проверка. В таблице ovarian нет совпадающих моментов смерти, поэтому методы Эфрона и Бреслоу дают одинаковые коэффициенты (0.1470 для возраста и −0.8026 для схемы B), как и должно быть, когда совпадений нет.

Сэндвич-оценка дисперсии кластеризуется по наблюдению, когда коэффициент, зависящий от времени, разбил период наблюдения на части. survSplit превращает одно наблюдение в несколько строк, по одной на период, и эти строки не являются независимыми наблюдениями. Робастная дисперсия, считающая их независимыми, занижала бы стандартные ошибки, поэтому подгонка с коэффициентом, зависящим от времени, передаёт id = tv_id вместе с robust = TRUE, и coxph кластеризует по этому идентификатору.

cox.zph работает со временем без преобразования. По умолчанию он преобразует время по шкале Каплана — Мейера, и тогда по оси x графика Шёнфельда откладывалось бы преобразованное время, хотя ось подписана в единицах переменной времени. С transform = "identity" остатки откладываются против исходного времени, и график соответствует подписи. Цена этого — немного меньшая мощность, чем у преобразования КМ при сильном цензурировании. Сглаживание остатков — loess с параметром span 0.75. Если в модели не оценивается ни один коэффициент (ковариата под другим именем повторяет страты или постоянна), cox.zph останавливается с ошибкой индексации. Ошибка перехватывается: вместо сбоя всего запуска карточка сообщает, что критерий вычислить нельзя. Мартингальные остатки, dfbetas и базовая кривая выживаемости с коэффициентом NA справляются, и такая защита им не нужна.

График log-log строится по оценке Каплана — Мейера для страт, а не по модели Кокса. log(−log S(t)) по группам — проверка допущения о пропорциональности рисков для группирующей переменной, и кривые нужно оценить, не предполагая его. Базовая кривая стратифицированной модели Кокса заложила бы это допущение для ковариат и ничего не оценила бы для страт. Поэтому для графика на тех же строках подгоняется survfit(Surv ~ stratumVar) и рисуются его кривые. График доступен, только если задана группирующая переменная, поскольку иначе сравнивать нечего.

Мартингальные остатки строятся только для непрерывных ковариат, а dfbetas стандартизованы. Проверка функциональной формы выясняет, входит ли ковариата линейно, а у фактора такого нарушения быть не может, поэтому при одних категориальных ковариатах панели не рисуются. Влияние выводится как residuals(fit, type = "dfbetas"), то есть dfbeta, делённое на стандартную ошибку коэффициента, чтобы значения были сравнимы между коэффициентами в разных шкалах. Обычный ориентир — 2⁄√n. Для модели с одним членом residuals() возвращает простой вектор без имён столбцов, поэтому столбцы именуются по таблице коэффициентов в порядке коэффициентов.

Коэффициент, зависящий от времени, — кусочно-постоянное взаимодействие на эпизодах survSplit с разрезами по умолчанию в тертилях времён событий, а непригодные разрезы отбрасываются. Ковариата выходит из главных эффектов и снова входит в модель по коэффициенту на период, во взаимодействии с фактором периода на данных процесса счёта, которые строит survSplit. Собственного главного эффекта у фактора периода нет: все наблюдения под риском в данный момент находятся в одном периоде, и он сокращается в частичном правдоподобии. Разрезы по умолчанию — тертили наблюдаемых времён событий: три периода с примерно равным числом событий, наименьшее разбиение, на котором виден растущий или убывающий эффект. Заданный или стандартный разрез отбрасывается, если рядом с ним оказался бы период без событий, поскольку по такому периоду ничего нельзя оценить, а если не остаётся ни одного разреза, карточка сообщает об этом вместо результатов подгонки. Разрезание в фиксированные моменты не меняет ни одного множества риска, поэтому неразрезанная подгонка — в точности вложенная нулевая модель пропорциональных рисков для интервальной модели, и критерий отношения правдоподобий между ними и есть критерий пропорциональности, который выводит карточка. Проверка EPV учитывает дополнительные коэффициенты до подгонки.

Проверка. Двенадцать моментов смерти в таблице ovarian делятся разрезами на 329-м и 464-м днях на периоды с пятью, четырьмя и тремя смертями.

Модель Гомпертца подгоняется через eha::phreg, который не принимает интервально-цензурированный отклик. В пакете survival нет семейства Гомпертца, поэтому единственная параметрическая модель пропорциональных рисков подгоняется через eha. phreg принимает объекты Surv с правым цензурированием и левым усечением, но не interval2, поэтому при интервальном цензурировании модель Гомпертца отклоняется при прямом выборе и исключается из режима Сравнить все, где рейтинг тогда охватывает пять семейств AFT. В режиме сравнения проверка EPV закладывает два параметра распределения Гомпертца как наихудший случай, чтобы порог был рассчитан и на наименее экономное семейство в сравнении.

Наложение на кривую Каплана — Мейера при интервальном цензурировании не выводится. Опорная кривая — это оценка Каплана — Мейера из survfit, а для интервального цензурирования у этой функции нет варианта. Наложение на НПМП Тёрнбулла потребовало бы подгонки Icens рядом с каждой параметрической подгонкой, поэтому карточка выводит вместо него примечание о недоступности. Гладкая кривая вычисляется при числовых ковариатах на среднем и факторных на опорном уровне, по кривой на группу, если задана группирующая переменная.

Подгонки по причинам берут поля совпадений и робастной дисперсии с карточки Кокса, а модель Файна — Грея получает заранее закодированную матрицу. Подгонка по причинам — это coxph для каждой причины, где остальные причины закодированы как цензурирование, поэтому ей предлагаются те же поля совпадений и дисперсии на карточке с заголовком Опции специфичной для причины модели Кокса. Диагностика сюда не входит: каждая проверка относится к одной модели, а здесь моделей столько, сколько причин. Причина, подгонка для которой не сошлась, выводится строкой-предупреждением вместо таблицы. cmprsk::crr не принимает формулу, только числовую матрицу плана. Поэтому ветка Файна — Грея кодирует каждую факторную ковариату фиктивными переменными в JavaScript, сортируя уровни так же, как factor() в R (как числа, если каждый уровень — число, иначе по правилам сортировки локали), чтобы опорным оказался тот же уровень, что и в подгонке по причинам, и привязывает столбцы по именам.

Проверки объёма выборки и EPV

Проверка EPV отклоняет подгонку, если событий меньше одного на параметр, и предупреждает, если меньше десяти, считая параметры, которые подгонка действительно оценит. Информация о коэффициентах модели выживаемости содержится в событиях, а не в строках, поэтому проверка делит число событий, доступных модели, на число оцениваемых коэффициентов. Если событий меньше одного на параметр, частичное правдоподобие вырождено (бесконечно много векторов коэффициентов подходят одинаково хорошо), и расчёт отклоняется до обращения к R. Если событий на параметр от одного до десяти, расчёт идёт с предупреждением: десять на параметр — принятое рабочее правило для устойчивых оценок. Счёт соответствует самой подгонке: один параметр на числовую ковариату и по одному на каждый уровень фактора после первого; группирующая переменная учитывается там, где входит факторной ковариатой (survreg, phreg и ic_sp), и не учитывается там, где coxph принимает её как strata() без оценки коэффициента; коэффициенты периодов для зависящего от времени коэффициента учитываются до подгонки по разрезам, которые оставит timeVaryingCuts; параметрическое семейство добавляет параметры распределения (один, два у Гомпертца, ни одного у экспоненциального), а режим Сравнить все закладывает два параметра Гомпертца независимо от того, попадёт ли Гомпертц в рейтинг, как сказано в заметке о Гомпертце; регрессия конкурирующих рисков проверяется по причине с наименьшим числом событий, поскольку каждая причина — отдельная модель и первой не справится модель с наименьшим числом событий. Подгонка, не оценивающая ни одного параметра (экспоненциальная без ковариат), не проверяется.

Проверка. В таблице ovarian модель Кокса с возрастом и схемой лечения тратит два параметра на двенадцать смертей, по шесть на параметр, и выполняется с предупреждением. Если задать для возраста коэффициент, зависящий от времени, то при разрезах по умолчанию на 329-м и 464-м днях, добавятся два коэффициента периодов: четыре параметра, по три смерти на каждый, и модель всё ещё выполняется.

Чтение результатов

RMST ограничивается наибольшим горизонтом, которого достигают все страты, а разности RMST проверяются z-критерием для независимых страт. summary(fit, rmean = tau) даёт ограниченное среднее и его стандартную ошибку по стратам, а τ — наименьшее из последних наблюдённых времён страт. Вариант rmean = "common" обрезал бы на наибольшем времени по всем стратам и продолжал бы короткую кривую горизонтально за пределы её периода наблюдения, экстраполируя группу, где данных меньше всего. Единое для карточки значение τ обеспечивает сравнимость страт и указывается на карточке. Разность двух страт — разность их ограниченных средних со стандартной ошибкой, равной корню из суммы квадратов их ошибок, поскольку страты — независимые выборки. Из неё следуют z и p, а если пар больше одной, p-значения проходят через p.adjust согласно настройке, отдельным от попарных ранговых критериев семейством, поскольку те и другие отвечают на разные вопросы. Медиана вычисляется как quantile(fit, probs = 0.5, conf.int = TRUE), поэтому её интервал построен на уровне доверия подгонки. Медиана равна NA и выводится как –, когда кривая не опускается до 0.5. Граница, для которой доверительная полоса не опускается до 0.5, тоже равна NA, и строка интервала остаётся пустой.

Проверка. В таблице ovarian τ равно 1106 дням, последнему наблюдению схемы A. В группе A среднее время без события составляет 649.6 дня (SE 120.1), в группе B — 820.3 (SE 97.5), и их разность −170.7 дня имеет SE √(120.1² + 97.5²) = 154.7, z = −1.10, p = 0.27. Медиана схемы A — 638 дней с нижней границей 268 и без верхней, поэтому строка её интервала пуста. Медиана схемы B не достигнута.

Базовая кривая для точных времён строится в опорной точке survfit.coxph по умолчанию, то есть при средних матрицы модели, включая факторы, а при интервальном цензурировании — на опорных уровнях. survfit(fit) без newdata вычисляет кривую при средних столбцов матрицы модели, а для фактора это среднее его фиктивных столбцов, то есть доли уровней в выборке. Поэтому кривая описывает выживаемость «среднего» наблюдения, а не опорного уровня, и примечание под графиком сообщает об этом, чтобы читатель не принял её за кривую опорного уровня. Стратифицированная подгонка сама даёт по кривой на страту, каждую с полосой, которую survfit строит на уровне доверия расчёта. icenReg::getSCurves требует явного newdata, поэтому путь с интервальным цензурированием строит по строке на уровень группирующей переменной, с числовыми ковариатами на средних и факторными на первом уровне. survCIs не работает с полупараметрической подгонкой, так что у этой кривой полосы нет. Примечания об опорной точке на двух карточках различаются, потому что различаются сами опорные точки.

Коэффициенты параметрических моделей — интервалы Вальда на логарифмической шкале, взятые из сводной таблицы survreg или из вектора коэффициентов phreg. Сводка survreg даёт каждой строке (ковариатам, свободному члену и Log(scale)) значение, стандартную ошибку, z и p, а интервал равен exp(значение ± z·SE) на уровне доверия расчёта. Поэтому у свободного члена и строки масштаба тоже есть экспоненцированный столбец: для Log(scale) это сам масштаб, для свободного члена — масштаб времени при нулевых ковариатах. eha::phreg сводной таблицы не даёт, поэтому строки Гомпертца, включая log(scale) и log(shape), берутся из $coefficients со стандартными ошибками sqrt(diag($var)). При интервальном цензурировании число событий берётся из столбца статуса отклика interval2, поскольку флаг события в JavaScript там ненадёжен.

Гладкая кривая наложения — собственная функция квантилей подгонки, а столбцы AIC показывают ΔAIC. Для семейства AFT кривая — это predict(type = "quantile") по вероятностям выживания от 0.01 до 0.99, поэтому она продолжается до момента, когда, по подогнанному семейству, выживает 1%, часто далеко за пределами наблюдения. Для Гомпертца это S₀(t) из eha::Hgompertz в канонической параметризации, которую и подгоняет phreg, возведённая в степень exp линейного предиктора. Обе кривые строятся при числовых ковариатах на средних и факторных на опорных уровнях, по кривой на уровень группирующей переменной, поверх кривой Каплана — Мейера из survfit на тех же строках. Столбцы показывают ΔAIC, а не AIC, потому что логарифм правдоподобия выше нуля (обычное дело при коротких временах) делает AIC отрицательным, а отрицательное значение нельзя изобразить столбцом, отложенным от оси. Семейство, подгонка которого не удалась, остаётся в рейтинге с ✗ и сообщением R под таблицей, так что выпавшее семейство не остаётся незамеченным.

Проверка. В рейтинге шести семейств на таблице ovarian с возрастом в качестве ковариаты и схемой лечения в качестве группирующей переменной первым идёт логнормальное семейство с AIC 183.36, за ним логлогистическое (отставание 0.77), Вейбулла (2.20), экспоненциальное (5.08), Гомпертца (5.82) и гауссово (15.05). Это тот же порядок, что на странице понятий.

Доверительные границы функции кумулятивной инцидентности строятся на шкале cloglog, а попарные критерии Грея корректируются внутри каждой причины. cuminc возвращает оценку и дисперсию каждой кривой. Границы строятся для θ = log(−log(1 − F)) с Var(θ) = V ⁄ ((1 − F) log(1 − F))² и переводятся обратно, так что они остаются в пределах [0, 1] и расширяются несимметрично к середине. В точке, где F равно 0 или 1 или дисперсия равна 0, преобразование не определено, и граница совпадает с самим F. Критерий Грея — собственный критерий cuminc. При трёх и более группах он повторяется для каждой пары, и попарные p-значения каждой причины корректируются как отдельное семейство, по тому же разбиению, что и общие критерии над ними, так что поправка никогда не охватывает несколько причин.

Исключённые наблюдения и пропущенные значения

Каждое исключение подсчитывается в JavaScript до передачи данных в R, а настройку пропущенных данных модуль не использует. Каждое правило исключения из списка в руководстве срабатывает при сборке столбцов, поэтому счётчик на карточке точен, а все причины исключения названы. Surv превратил бы время вхождения, не меньшее времени наблюдения, или интервал с верхней границей ниже нижней в NA лишь с предупреждением в консоли, и N на карточке осталось бы необъяснённым. Глобальная обработка пропусков уже применена к загруженным данным к тому моменту, когда модуль их получает, а собственной подстановки модуль не делает, поскольку подставленное время наблюдения или уровень события были бы наблюдением, которого никогда не было.