问题
The integrated Brier score (IBS) has been suggested in a paper by Graf et al (1999) as a good measure for prediction accuracy in survival models (see e.g. overview paper by Wiering et al., page 23).
It was implemented in the package ipred as function sbrier. However, whereas the brier score definition obviously applies to Cox proportional hazard models, I cannot get sbrier to return the Brier score for a coxph model.
Here is the problem set up.
library(survival)
library(ipred)
data("DLBCL", package = "ipred")
#Fit coxph model
smod <- Surv(DLBCL$time, DLBCL$cens)
coxmod <- coxph(smod ~ IPI, data = DLBCL) # I just chose a significant covariate from DLBCL
Now I want to estimate the IBS. Following ?sbrier
obj : an object of class Surv.
pred : predicted values. Either a probability or a list of survfit objects.
So we have a list of survfit objects
sbrier(smod, list(survfit(coxmod) ))
or survival probabilties
sbrier(smod, survfit(coxmod,newdata=DLBCL)$surv )
The first returning
Error in sbrier(smod, list(survfit(coxmod))) :
pred must be of length(time)
The second
Error in sbrier(smod, survfit(coxmod, newdata = DLBCL)$surv) :
wrong dimensions of pred
The examples do not list a coxph model. Perhaps it's not supported. Otherwise, where do I go wrong?
回答1:
You can use the pec package, instead.
Example:
library(pec)
set.seed(18713)
library(prodlim)
library(survival)
dat=SimSurv(100)
pmodel=coxph(Surv(time,status)~X1+X2,data=dat)
perror=pec(list(Cox=pmodel),Hist(time,status)~1,data=dat)
## cumulative prediction error
crps(perror) # between min time and 1
## same thing:
ibs(perror)
回答2:
library(survival)
library(ipred)
data("DLBCL", package = "ipred")
smod <- Surv(DLBCL$time, DLBCL$cens)
coxmod <- coxph(smod ~ IPI, data = DLBCL)
coxmod
Call:
coxph(formula = smod ~ IPI, data = DLBCL)
coef exp(coef) se(coef) z p
IPI 0.505 1.657 0.181 2.79 0.0053
Likelihood ratio test=8.15 on 1 df, p=0.0043
n= 38, number of events= 20
(2 observations deleted due to missingness)
Only 38 observations were used . The others needed to be removed before predicting.
DLBCL <- DLBCL[!(is.na(DLBCL$IPI)|is.na(DLBCL$time)|is.na(DLBCL$cens)),]
pred <- predict(coxmod)
sbrier(smod, pred,btime=2)
result
Brier score
1.457241
attr(,"time")
[1] 2
The btime must be specified, which means ibs can't be calculated. I have not figured it out yet.
来源:https://stackoverflow.com/questions/42583087/estimating-prediction-accuracy-of-a-cox-survival-model-using-sbrier-r