当前位置: 首页 > 知识库问答 >
问题:

如何在随机森林SRC中计算中位生存率

万嘉石
2023-03-14

我试图计算随机森林SRC的中位生存率。

library(randomForestSRC)
data(veteran, package = "randomForestSRC")
train <- sample(1:nrow(veteran), round(nrow(veteran) * 0.80))
veteran.grow <- rfsrc(Surv(time, status) ~ ., veteran[train, ], ntree = 100)
veteran.pred <- predict(veteran.grow, veteran[-train , ])
print(veteran.grow)
print(veteran.pred)

我得到了生存功能

veteran.pred$survival

我想得到生存函数的中值(值< code >老兵. pred $生存== 0.5,例如,第一行)

a = as.data.frame(veteran.pred$time.interest)
b= as.data.frame(veteran.pred$survival[1,])
df =cbind(a, b)
df <-rename(df, `time` =`veteran.pred$time.interest`)
df$`veteran.pred$survival[1, ]` = round(df$`veteran.pred$survival[15, ]`, 2)
subset(df, df$`veteran.pred$survival[1, ]`== 0.5 )$time

问题是,生存函数很少有意义。在我们的例子中,精确到0.5

[1] 1.00 1.00 1.00 0.95 0.95 0.95 0.95 0.93 0.93 0.93 0.93 0.93 0.93 0.93 0.90 0.90 0.90 0.87 0.87 0.87
[21] 0.87 0.87 0.86 0.76 0.76 0.67 0.67 0.67 0.67 0.67 0.67 0.66 0.66 0.66 0.66 0.66 0.65 0.64 0.57 0.57
[41] 0.57 0.57 0.57 0.57 0.57 0.48 0.45 0.39 0.39 0.32 0.32 0.29 0.29 0.29 0.29 0.26 0.26 0.25 0.25 0.25
[61] 0.25 0.25 0.25 0.25 0.20 0.20 0.20 0.20 0.20 0.20 0.18 0.18 0.18 0.16 0.16 0.16 0.14 0.14 0.14 0.11
[81] 0.07 0.07

所以我们有最接近的值0.57

共有1个答案

颛孙嘉石
2023-03-14

我不认为< code>time.interest是用于该目的的正确项目,因为它的长度比验证集中的案例数要长得多。(也就是说,我不确定它到底想告诉你什么。)如果您查看< code>str(veteran.pred)的输出,您会在顶部看到:

str(veteran.pred)
List of 32
 $ call          : language generic.predict.rfsrc(object = object, newdata = newdata, outcome.target = outcome.target,      importance = impo| __truncated__ ...
 $ family        : chr "surv"
 $ n             : int 27
 $ ntree         : num 100
 $ yvar          :'data.frame': 27 obs. of  2 variables:
  ..$ time  : int [1:27] 100 384 123 22 21 139 31 51 54 132 ...
  ..$ status: int [1:27] 0 1 0 1 1 1 1 1 1 1 ...
 $ yvar.names    : chr [1:2] "time" "status"
 $ xvar          :'data.frame': 27 obs. of  6 variables:
  ..$ trt     : int [1:27] 1 1 1 1 1 1 1 1 1 1 ...
  ..$ celltype: int [1:27] 1 2 2 2 2 2 2 2 2 3 ...
  ..$ karno   : int [1:27] 70 60 40 60 40 80 75 60 70 80 ...
  ..$ diagtime: int [1:27] 6 9 3 4 2 2 3 1 1 5 ...
  ..$ age     : int [1:27] 70 42 55 68 55 64 65 67 67 50 ...
  ..$ prior   : int [1:27] 0 0 0 0 10 0 0 0 0 0 ...
 $ xvar.names    : chr [1:6] "trt" "celltype" "karno" "diagtime" ...
 # --- snipped

我认为,由于27是< code >老兵[-train,]的行数,您需要使用预测列表中的< code>yvar项:

 str(veteran.pred$yvar)
#'data.frame':  27 obs. of  2 variables:
# $ time  : int  100 384 123 22 21 139 31 51 54 132 ...
# $ status: int  0 1 0 1 1 1 1 1 1 1 ...
?survfit
 survfit(Surv(time,status)~1  , data=veteran.pred$yvar)
#Call: survfit(formula = Surv(time, status) ~ 1, data = veteran.pred$yvar)
#
      n  events  median 0.95LCL 0.95UCL 
     27      24      54      49     139 
plot( survfit(Surv(time,status)~1  , data=veteran.pred$yvar) )

我对建议这一程序持严重保留意见。请注意,在该列表的林节点内有另一个名为 yvar 的项目,它有 110 行(因此它是原始数据)。IOf你看看传统KM曲线在未经调整的镇痛上的结果,你会得到:

survfit(Surv(time,status)~1  , data=veteran.pred$forest$yvar) 
Call: survfit(formula = Surv(time, status) ~ 1, data = veteran.pred$forest$yvar)

      n  events  median 0.95LCL 0.95UCL 
    110     104      87      53     111 

我认为来自80:20 CV策略的27个案例将给出一个非常不稳定的中位数估计方法,特别是当存在分类预测时。我还认为,随机forrest范式应该能够从整个数据集中得出有用的预测,而无需使用交叉验证类型的数据拆分。

 类似资料:
  • 随机森林是集成学习中可以和梯度提升树GBDT分庭抗礼的算法,尤其是它可以很方便的并行训练,在如今大数据大样本的的时代很有诱惑力。 1. bagging的原理 在集成学习原理小结中,我们给Bagging画了下面一张原理图。 从上图可以看出,Bagging的弱学习器之间的确没有boosting那样的联系。它的特点在“随机采样”。那么什么是随机采样? 随机采样(bootsrap)就是从我们的训练集里面采

  • 在随机森林方法中,创建了大量决策树。 每个观察都被送入每个决策树。 每次观察的最常见结果用作最终输出。 一个新的观察结果被输入所有树木,并对每个分类模型进行多数投票。 对构建树时未使用的情况进行错误估计。 这称为OOB (Out-of-bag)错误估计,以百分比形式提及。 R包"randomForest"用于创建随机森林。 安装R包 在R控制台中使用以下命令安装程序包。 您还必须安装依赖包(如果有

  • 主要内容:安装R包 - randomForest,语法,示例在随机森林方法中,创建了大量的决策树。每个观察结果都被送入每个决策树。 每个观察结果最常用作最终输出。对所有决策树进行新的观察,并对每个分类模型进行多数投票。 对于在构建树时未使用的情况进行错误估计。 这被称为OOB(Out-of-bag)错误估计,以百分比表示。 R中的软件包用于创建随机林。 安装R包 - randomForest 在R控制台中使用以下命令安装软件包,还必须安装其它依赖软件包(如

  • 1 Bagging   Bagging采用自助采样法(bootstrap sampling)采样数据。给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时,样本仍可能被选中, 这样,经过m次随机采样操作,我们得到包含m个样本的采样集。   按照此方式,我们可以采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基本学习器,再将这些基本学习

  • 我有一个随机森林,目前建立在100个不同的变量之上。我希望能够只选择“最重要”的变量来构建我的随机森林,以尝试提高性能,但我不知道从哪里开始,除了从rf$重要性中获得重要性。 我的数据只是由数字变量组成,这些变量都经过了缩放。 以下是我的射频代码:

  • 主要内容:决策树和随机森林,算法应用及其实现,总结随机森林(Random Forest,简称RF)是通过集成学习的思想将多棵树集成的一种算法,它的基本单位是决策树模型,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。我们知道,集成学习的实现方法主要分为两大类,即 Bagging 和 boosting 算法,随机森林就是通过【Bagging 算法+决策树算法】实现的。前面已经学习过决策树算法,因此随机森林算法