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

咨询:使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:24:21