# \donttest{
# Train a standard survival forest.
n <- 2000
p <- 5
X <- matrix(rnorm(n * p), n, p)
failure.time <- exp(0.5 * X[, 1]) * rexp(n)
censor.time <- 2 * rexp(n)
Y <- pmin(failure.time, censor.time)
D <- as.integer(failure.time <= censor.time)
# Save computation time by constraining the event grid by discretizing (rounding) continuous events.
s.forest <- survival_forest(X, round(Y, 2), D)
# Or do so more flexibly by defining your own time grid using the failure.times argument.
# grid <- seq(min(Y[D==1]), max(Y[D==1]), length.out = 150)
# s.forest <- survival_forest(X, Y, D, failure.times = grid)
# Predict using the forest.
X.test <- matrix(0, 3, p)
X.test[, 1] <- seq(-2, 2, length.out = 3)
s.pred <- predict(s.forest, X.test)
# Plot the survival curve.
plot(NA, NA, xlab = "failure time", ylab = "survival function",
xlim = range(s.pred$failure.times),
ylim = c(0, 1))
for(i in 1:3) {
lines(s.pred$failure.times, s.pred$predictions[i,], col = i)
s.true = exp(-s.pred$failure.times / exp(0.5 * X.test[i, 1]))
lines(s.pred$failure.times, s.true, col = i, lty = 2)
}
# Predict on out-of-bag training samples.
s.pred <- predict(s.forest)
# Compute OOB concordance based on the mortality score in Ishwaran et al. (2008).
s.pred.nelson.aalen <- predict(s.forest, prediction.type = "Nelson-Aalen")
chf.score <- rowSums(-log(s.pred.nelson.aalen$predictions))
if (require("survival", quietly = TRUE)) {
concordance(Surv(Y, D) ~ chf.score, reverse = TRUE)
}
# }
Run the code above in your browser using DataLab