Использование дерева выживания из пакета 'rpart' в R для прогнозирования новых наблюдений

Я пытаюсь использовать пакет «rpart» в R для построения дерева выживания, и я надеюсь использовать это дерево, чтобы затем делать прогнозы для других наблюдений.

Я знаю, что было много SO вопросов, включая rpart и прогнозирование; однако я не смог найти ни одной, которая решала бы проблему, которая (я думаю) специфична для использования rpart с объектом "Surv".

Моя конкретная проблема заключается в интерпретации результатов функции «прогнозирования». Полезный пример:

library(rpart)
library(OIsurv)

# Make Data:
set.seed(4)
dat = data.frame(X1 = sample(x = c(1,2,3,4,5), size = 1000, replace=T))
dat$t = rexp(1000, rate=dat$X1)
dat$t = dat$t / max(dat$t)
dat$e = rbinom(n = 1000, size = 1, prob = 1-dat$t )

# Survival Fit:
sfit = survfit(Surv(t, event = e) ~ 1, data=dat)
plot(sfit)

# Tree Fit:
tfit = rpart(formula = Surv(t, event = e) ~ X1 , data = dat, control=rpart.control(minsplit=30, cp=0.01))
plot(tfit); text(tfit)

# Survival Fit, Broken by Node in Tree:
dat$node = as.factor(tfit$where)
plot( survfit(Surv(dat$t, event = dat$e)~dat$node) )

Все идет нормально. Мое понимание того, что здесь происходит, заключается в том, что rpart пытается согласовать экспоненциальные кривые выживания с подмножествами моих данных. Исходя из этого понимания, я считаю, что когда я звонюpredict(tfit)Я получаю для каждого наблюдения число, соответствующее параметру для экспоненциальной кривой для этого наблюдения. Так, например, еслиpredict(fit)[1] .46, то это означает, что для первого наблюдения в моем исходном наборе данных, кривая задается уравнениемP(s) = exp(−λt), гдеλ=.46.

Это похоже на то, что я хотел бы. Для каждого наблюдения (или любого нового наблюдения) я могу получить предсказанную вероятность того, что это наблюдение будет живым / мертвым в данный момент времени.(РЕДАКТИРОВАТЬ: я понимаю, что это, вероятно, заблуждение - эти кривые не дают вероятность живых / мертвых, но вероятность выживания интервала. Это не меняет проблему, описанную ниже, хотя.)

Однако, когда я пытаюсь использовать экспоненциальную формулу ...

# Predict:
# an attempt to use the rates extracted from the tree to
# capture the survival curve formula in each tree node.
rates = unique(predict(tfit))
for (rate in rates) {
  grid= seq(0,1,length.out = 100)
  lines(x= grid, y= exp(-rate*(grid)), col=2)
}

Я разделил набор данных так же, как дерево выживания, а затем использовалsurvfit построить непараметрическую кривую для каждого из этих разделов. Это черные линии. Я также нарисовал линии, соответствующие результату включения (как я думал, был) параметра «скорость» в (как я думал, было) экспоненциальную формулу выживания.

Я понимаю, что непараметрическое и параметрическое соответствие не обязательно должны совпадать, но это кажется чем-то большим: кажется, что мне нужно масштабировать свою переменную X или что-то в этом роде.

В принципе, я, кажется, не понимаю формулу, которую rpart /74 использует под капотом. Может ли кто-нибудь помочь мне перейти от (1) модели rpart к (2) уравнению выживания для любого произвольного наблюдения?

Ответы на вопрос(1)

Ваш ответ на вопрос