Usando uma árvore de sobrevivência do pacote 'rpart' em R para prever novas observações

Estou tentando usar o pacote "rpart" no R para criar uma árvore de sobrevivência e espero usá-la para fazer previsões para outras observações.

Eu sei que houve muitas perguntas de SO envolvendo rpart e predição; no entanto, não consegui encontrar nenhum que resolva um problema específico (acho) específico para usar o rpart com um objeto "Surv".

Meu problema específico envolve a interpretação dos resultados da função "prever". Um exemplo é útil:

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) )

Por enquanto, tudo bem. Meu entendimento do que está acontecendo aqui é que a rpart está tentando ajustar curvas de sobrevivência exponenciais a subconjuntos dos meus dados. Com base nesse entendimento, acredito que quando ligopredict(tfit), Recebo, para cada observação, um número correspondente ao parâmetro para a curva exponencial para essa observação. Então, por exemplo, sepredict(fit)[1] é 0,46, então isso significa que, para a primeira observação no meu conjunto de dados original, a curva é dada pela equaçãoP(s) = exp(−λt), Ondeλ=.46.

Parece exatamente o que eu gostaria. Para cada observação (ou qualquer nova observação), posso obter a probabilidade prevista de que essa observação esteja viva / morta por um determinado ponto no tempo.(EDIT: Estou percebendo que isso provavelmente é um equívoco - essas curvas não dão a probabilidade de vivo / morto, mas a probabilidade de sobreviver a um intervalo. Isso não altera o problema descrito abaixo.)

No entanto, quando tento usar a fórmula exponencial ...

# 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)
}

O que eu fiz aqui é dividir o conjunto de dados da mesma maneira que a árvore de sobrevivência, e depois usarsurvfit plotar uma curva não paramétrica para cada uma dessas partições. Essas são as linhas pretas. Também desenhei linhas correspondentes ao resultado de conectar (o que eu pensava) o parâmetro 'rate' (no que eu pensava) a fórmula exponencial de sobrevivência.

Entendo que o ajuste não paramétrico e o paramétrico não devem necessariamente ser idênticos, mas isso parece mais do que isso: parece que eu preciso escalar minha variável X ou algo assim.

Basicamente, parece que não entendo a fórmula que o rpart / survival está usando sob o capô. Alguém pode me ajudar a passar de (1) modelo rpart para (2) uma equação de sobrevivência para qualquer observação arbitrária?

questionAnswers(1)

yourAnswerToTheQuestion