使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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