使用ranger R包计算Brier分数和综合Brier分数

我想使用“ranger”R包来计算我的分析中的Brier分数和综合Brier分数。

作为示例,我使用“survival”包中的veteran数据如下

install.packages("ranger")library(ranger)install.packages("survival")library(survival)#加载veteran数据data(veteran)data <- veteran#训练和测试数据n <- nrow(data)testind <- sample(1:n,n*0.7)trainind <- (1:n)[-testind]#训练ranger模型rg <- ranger(Surv(time, status) ~ ., data = data[trainind,])#使用rg预测测试数据pred <- predict(rg,data=data[testind,],num.trees=rg$num.trees)#每个样本的累积风险函数pred$chf#每个样本的生存概率pred$survival

如何计算Brier分数和综合Brier分数?


回答:

综合Brier分数(IBS)可以使用pec包的pec函数来计算,但你需要定义一个predictSurvProb命令来从ranger建模方法中提取生存概率预测(有关可用模型的列表,请参阅?pec:::predictSurvProb)。
一种可能的解决方案是:

predictSurvProb.ranger <- function (object, newdata, times, ...) {    ptemp <- ranger:::predict.ranger(object, data = newdata, importance = "none")$survival    pos <- prodlim::sindex(jump.times = object$unique.death.times,         eval.times = times)    p <- cbind(1, ptemp)[, pos + 1, drop = FALSE]    if (NROW(p) != NROW(newdata) || NCOL(p) != length(times))         stop(paste("\nPrediction matrix has wrong dimensions:\nRequested newdata x times: ",             NROW(newdata), " x ", length(times), "\nProvided prediction matrix: ",             NROW(p), " x ", NCOL(p), "\n\n", sep = ""))    p}

这个函数可以按如下方式使用:

library(ranger)library(survival)data(veteran)dts <- veterann <- nrow(dts)set.seed(1)testind <- sample(1:n,n*0.7)trainind <- (1:n)[-testind]rg <- ranger(Surv(time, status) ~ ., data = dts[trainind,])#输入到pec命令中的公式frm <- as.formula(paste("Surv(time, status)~",       paste(rg$forest$independent.variable.names, collapse="+")))library(pec)#使用pec估计IBS值PredError <- pec(object=rg,    formula = frm, cens.model="marginal",    data=dts[testind,], verbose=F, maxtime=200)

可以使用print.pec命令评估IBS,在times中指示要显示IBS的时间点:

print(PredError, times=seq(10,200,50))# ...# 综合Brier分数 (crps):# #            IBS[0;time=10) IBS[0;time=60) IBS[0;time=110) IBS[0;time=160)# Reference          0.043          0.183           0.212           0.209# ranger             0.041          0.144           0.166           0.176

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注