2016-05-05 19 views
1

Ich versuche eine Überlebensanalyse mithilfe von Entscheidungsbäumen in Rpart durchzuführen, ähnlich wie hier: Using a survival tree from the 'rpart' package in R to predict new observations. Um das Entscheidungsbaum-Überlebensmodell mit anderen Modellen, wie der Cox-Regression, zu vergleichen, möchte ich eine Kreuzvalidierung verwenden, um Dxy zu erhalten und den C-Index zu vergleichen. Wenn ich versuche, validate.rpart mit einer Rpart-Anpassung zu verwenden, die ein Surv-Objekt enthält, erhalte ich einen Fehler. Leihen Sie das Beispiel aus der vorherige Frage:Ich versuche eine Kreuzvalidierung eines Überlebensbaums durchzuführen.

library(rms) 

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

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

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

die Fehler:

Error in unclass(x)[i, , drop = FALSE] : 
(subscript) logical subscript too long 

Jede Idee für eine Abhilfe für dieses Problem? Gibt es einen anderen Weg, um den C-Index von einem R-Überlebensmodell zu erhalten?

Antwort

2

Das R rms Paket validate.rpart Funktion implementiert derzeit keine Überlebensmodelle (die in Wirklichkeit einfache exponentielle Verteilungsmodelle sind). Ich habe den Code dafür verbessert, und diese Funktionalität wird in der nächsten Version des rms Pakets zu CRAN in ein paar Wochen sein. Neuer Quellcode kann bis morgen bei https://github.com/harrelfe/rms erhalten werden, aber das wird nicht sehr helfen, weil validate.rpart eine Methode ist.

Beachten Sie, dass die Stichprobengröße für die rekursive Partitionierung zu hoch sein kann, z. B. 100.000 Subjekte in einigen Fällen, damit der Regressionsbaum zuverlässig und stabil ist.

+0

Vielen Dank für das Code-Update, es scheint mir jetzt ein vernünftiges Ergebnis, aber was meinst du mit "das wird nicht sehr helfen, weil validate.rpart eine Methode ist"? Es schien mir wirklich sehr zu helfen! Wenn Sie sich auf die Daten in meinem Beispiel beziehen, habe ich tatsächlich 250.000 Themen in meinen Produktionsdaten. –

+0

Entschuldigung, ich habe das nicht klar geschrieben. Was ich damit meinte, ist, dass wenn Sie einfach source() in der neuen Version der Funktion verwenden, ohne das Paket neu zu erstellen oder viele weitere Code-Dateien im Paket zu verwenden, würde das System die neue Version von "validate.rpart" ignorieren. –

+0

Wenn Sie nur einen zusätzlichen Befehl hinzufügen: 'environment (validate.rpart) <- environment (cph)' nach 'source()' -den neuen Code von RMS Version 4.5-1, dann ist alles in Ordnung. –