prognosis3$pred <- riskRegression::predictRisk(full_model,
newdata = prognosis3,
times = 0.99)
prognosis3$pred.cll <- log(-log(1 - prognosis3$pred))
# estimate actual risk
vcal <- rms::cph(Surv(time, endpoint) ~ rcs(pred.cll, 3),
x = T,
y = T,
surv = T,
data = prognosis3
)
dat_cal <- cbind.data.frame(
"obs" = 1 - rms::survest(vcal,
times = 0.99,
newdata = prognosis3)$surv,
"lower" = 1 - rms::survest(vcal,
times = 0.99,
newdata = prognosis3)$upper,
"upper" = 1 - rms::survest(vcal,
times = 0.99,
newdata = prognosis3)$lower,
"pred" = prognosis3$pred
)
# flexible calibration curve
dat_cal <- dat_cal[order(dat_cal$pred), ]
par(xaxs = "i", yaxs = "i", las = 1)
plot(
dat_cal$pred,
dat_cal$obs,
type = "l",
lty = 1,
xlim = c(0, 0.15),
ylim = c(0, 0.15),
lwd = 2,
xlab = "Predicted risk from developed model",
ylab = "Predicted risk from refitted model", bty = "n"
)
lines(dat_cal$pred,
dat_cal$lower,
type = "l",
lty = 2,
lwd = 2)
lines(dat_cal$pred,
dat_cal$upper,
type = "l",
lty = 2,
lwd = 2)
abline(0, 1, lwd = 2, lty = 2, col = 2)
legend("bottomright",
c("Ideal calibration",
"Calibration curve based on secondary Cox model",
"95% confidence interval"),
col = c(2, 1, 1),
lty = c(2, 1, 2),
lwd = c(2, 2, 2),
bty = "n",
cex = 0.85)
title("Apparent moderate calibration at 1y")