You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何运行R-Markdown后生存模型变量重要性图有差异?如何仅显示首个事件图?

问题解答

一、为什么生存模型的变量重要性图会不同?

出现这种情况主要有两个核心原因:

  1. 随机森林的随机性干扰:哪怕你设置了set.seed(0),如果R-Markdown的代码块开启了缓存,或者全局环境存在其他变量干扰,种子可能无法完全锁定随机森林的构建过程,导致每次生成的决策树存在细微差异,进而使变量重要性的排序或数值发生变化。另外randomForestSRC的生存森林计算逻辑中,部分随机抽样细节也可能在特定环境下产生波动。
  2. 默认绘图的多结果展示: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:30:28