---文末留言,即可有机会获得赠书噢!
随着机器学习的发展,机器学习模型被应用与生存分析的问题上,其中包括生存森 林模型。有几个包可以实现随机生存森林,包括ranger,randomForestSRC。本章节是通过ranger实现随机森林模型。 随机生存森林模型通过ranger函数构建,ranger()为数据集中的每个观察建立一个模型。下一个代码块使用上面Cox模型中使用的相同数据以及变量构建模型,并绘制20条随机曲线,以及表示所有患者的全局平均值的曲线。使用ranger构建随机森林模型,第一个参数依然是公式,公式的左边是一个生存对象。第二个参数是data,表示用于建模的数据集。第三个参数是mtry,用于表示所选取的特征数目,第四个参数importance用于指定变量重要性的模型。第五个参数splitrule用于指定决策树的划分指标。第六个参数verbose表示是否显示出运行状态。然后,结果曲线如图4.14所示。library(ranger)r_fit ph.karno + wt.loss, data = na.omit(lung), mtry = 4, importance = "permutation", splitrule = "extratrees", verbose = TRUE)# Average the survival modelsdeath_times surv_prob avg_prob # Plot the survival models for each patientplot(r_fit$unique.death.times,r_fit$survival[1,], type = "l", ylim = c(0,1), col = "red", xlab = "Days", ylab = "survival", main = "Patient Survival Curves")#cols for (n in sample(c(2:dim(veteran)[1]), 20)){ lines(r_fit$unique.death.times, r_fit$survival[n,], type = "l", col = cols[n])}lines(death_times, avg_prob, lwd = 2)legend(500, 0.7, legend = c('Average = black'))
图4.14 Kaplan-Meier模型的生存曲线图
图4.14显示随机生存森林模型中每一个树的生存函数曲线,以及平均的生存函数曲线。
接下来可以显示变量的重要性,模型的属性,variable.importance,包含了数据的重要性:
vi names(vi) head(vi)## importance## ph.karno 0.0254## sex 0.0221## wt.loss -0.0032## age -0.0062
从结果中可以看出,随机森林模型将sex,和ph.karno当作最重要的两个模型,这个与上文中Cox模型p值显著的两个变量相同。
构建好模型之后如果需要预测新数据的生存曲线,可以通过ranger的predictions函数进行预测,预测数据使用lung 的第二条数据,结果的生存曲线如图4.15所示。
p plot(p$survival,type = 'l', ylab="Survival probability", xlab="Time", main = "Predict Survival Plot")
模型构建好了之后,当有了新的数据,就可以使用这样的方式进行预测,获得新样本的一个生存曲线。图4.15显示出了随机生存森林预测结果的生存曲线图。
本文选自于清华大学出版社出版的《深入浅出R语言数据分析》一书的小节,略有改动。经出版社授权刊登于此。
留言赠书参与方法
活动截止时我们将选择5名幸运留言小伙伴获得以上赠书。
活动截止时间:2020年10月20日24:00