咨询:使用R语言dcurves包绘制Nomogram/T/N分期模型DCA曲线的代码是否正确
问题:用R的dcurves包绘制Nomogram/T/N分期模型的DCA曲线,以下代码是否正确?
用户提供的代码:
library(dcurves) Nomogram <- coxph(Surv(Survivalmonths,status)~Age_group+Histologic+T+N+Surgery+Radiation,data=data.train) T_stage <- coxph(Surv(Survivalmonths,status)~T,data=data.train) N_stage <- coxph(Surv(Survivalmonths,status)~N,data=data.train) tbl_regression(Nomogram, exponentiate = TRUE) data.train_updated1 <- broom::augment( Nomogram, newdata = data.train %>% mutate(Survivalmonths = 36), type.predict = "expected" ) %>% mutate( Nomogram = 1 - exp(-.fitted) ) data.train_updated2 <- broom::augment( T_stage, newdata = data.train %>% mutate(Survivalmonths = 36), type.predict = "expected" ) %>% mutate( T_stage = 1 - exp(-.fitted) ) data.train_updated3 <- broom::augment( N_stage, newdata = data.train %>% mutate(Survivalmonths = 36), type.predict = "expected" ) %>% mutate( N_stage = 1 - exp(-.fitted) ) df <- merge(x=data.train_updated1,y=data.train_updated2,by=".rownames", all.x = TRUE) df <- merge(x=df,y=data.train_updated3,by=".rownames", all.x = TRUE) dca(Surv(Survivalmonths,status) ~ Nomogram+T_stage+N_stage, data = df, time = 36, thresholds = 1:100 / 100) %>% plot(smooth = TRUE)
代码问题分析与修正建议
整体思路没问题,但存在几个关键细节错误:
- 数据合并导致列名混乱:三次
merge操作后,原始的Survivalmonths和status列会变成带.x/.y后缀的重复列,后续dca函数调用时无法识别正确的生存数据列。 - 缺失依赖包加载:
tbl_regression属于gtsummary包,代码未加载该包会直接报错。 - 冗余数据处理:没必要拆分生成三个数据框再合并,直接在原数据框生成预测值更简洁。
修正后的完整代码
# 加载所有需要的包 library(dcurves) library(survival) library(gtsummary) library(dplyr) # 构建三个Cox比例风险模型 Nomogram <- coxph(Surv(Survivalmonths, status) ~ Age_group + Histologic + T + N + Surgery + Radiation, data = data.train) T_stage <- coxph(Surv(Survivalmonths, status) ~ T, data = data.train) N_stage <- coxph(Surv(Survivalmonths, status) ~ N, data = data.train) # 输出Nomogram模型的格式化结果(可选) tbl_regression(Nomogram, exponentiate = TRUE) # 在原数据框直接生成三个模型的36个月事件发生概率 data.train <- data.train %>% mutate( Nomogram = 1 - exp(-broom::augment(Nomogram, newdata = mutate(., Survivalmonths = 36), type.predict = "expected")$.fitted), T_stage = 1 - exp(-broom::augment(T_stage, newdata = mutate(., Survivalmonths = 36), type.predict = "expected")$.fitted), N_stage = 1 - exp(-broom::augment(N_stage, newdata = mutate(., Survivalmonths = 36), type.predict = "expected")$.fitted) ) # 绘制DCA曲线 dca(Surv(Survivalmonths, status) ~ Nomogram + T_stage + N_stage, data = data.train, time = 36, thresholds = 1:100 / 100) %>% plot(smooth = TRUE)
内容的提问来源于stack exchange,提问作者Shiny-jin
相关产品推荐
相关产品推荐

