为何运行R-Markdown后生存模型变量重要性图有差异?如何仅显示首个事件图?
问题解答
一、为什么生存模型的变量重要性图会不同?
出现这种情况主要有两个核心原因:
- 随机森林的随机性干扰:哪怕你设置了
set.seed(0),如果R-Markdown的代码块开启了缓存,或者全局环境存在其他变量干扰,种子可能无法完全锁定随机森林的构建过程,导致每次生成的决策树存在细微差异,进而使变量重要性的排序或数值发生变化。另外randomForestSRC的生存森林计算逻辑中,部分随机抽样细节也可能在特定环境下产生波动。 - 默认绘图的多结果展示:
plot(fit)默认会输出生存模型的多种变量重要性结果——你提供的两张示例图,一张是针对死亡事件的特异性重要性图,另一张是包含删失数据的综合重要性图,这是不同维度的计算结果,并非完全由随机波动导致。
二、如何仅显示第一个事件的变量重要性图?
只需给plot()函数添加which=1参数,指定只绘制第一个事件对应的图即可,修改后的代码行如下:
plot(fit, which = 1)
整理后的完整可运行代码
library(randomForestSRC) library(survival) library(dplyr) # 使用select函数需加载此包 # 数据集为UCI心力衰竭临床记录数据集 ucifile <- "https://archive.ics.uci.edu/ml/machine-learning-databases/00519/heart_failure_clinical_records_dataset.csv" HF <- read.csv(ucifile, header=TRUE) HF$anaemia = as.factor(HF$anaemia) HF$diabetes = factor(HF$diabetes, levels=c(0, 1), labels=c("Absent", "Present")) HF$hypertension = factor(HF$high_blood_pressure, levels=c(0, 1), labels=c("Absent", "Present")) HF$sex = factor(HF$sex, levels=c(0, 1), labels=c("Female", "Male")) HF$smoking = factor(HF$smoking, levels=c(0, 1), labels=c("No", "Yes")) HF$DEATH_EVENT = as.factor(HF$DEATH_EVENT) HF <- select(HF, -high_blood_pressure) set.seed(0) fit <- rfsrc(Surv(time, DEATH_EVENT) ~ ., data = HF, ntree = 1000, importance = TRUE, nsplit = 5) # 仅绘制第一个事件的变量重要性图 plot(fit, which = 1)
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

