R语言绘制复杂加权数据(nhanes数据)多模型生存分析决策曲线

决策曲线分析(Decision Curve Analysis, DCA)是一种用于评估、比较和优化诊断试验、预测模型或分子标志物临床实用性的统计方法。它由Andrew J. Vickers和Eugene B. Elkin于2006年提出,旨在弥补传统统计指标(如灵敏度、特异度、ROC曲线下面积)在评估模型临床价值方面的不足。

在既往文章,本人介绍了我的ggscidca包,可以用于逻辑回归,生存分析等各种决策曲线绘制,但是据我所知,目前还没有R包能支持复杂加权数据(nhanes数据)生存分析决策曲线,在上篇文章《R语言绘制复杂加权数据(nhanes数据)生存分析决策曲线》我已经介绍了R语言绘制复杂加权数据(nhanes数据)生存分析决策曲线,目前我继续升级了ggscidca包,使得它能进一步支持nhanes多模型生存分析决策曲线,

下面我来演示一下,先导入数据和R包

r 复制代码
library(survey)
library(ggscidca)
library(scinhanes)
bc<-read.csv("E:/r/test/nahnesme.csv",sep=',',header=TRUE)
bc <- na.omit(bc)

我介绍一下数据,SEQN:序列号,RIAGENDR, # 性别, RIDAGEYR, # 年龄,RIDRETH1, # 种族,DMDMARTL, # 婚姻状况,WTINT2YR,WTMEC2YR, # 权重,SDMVPSU, # psu,SDMVSTRA,# strata,LBDGLUSI, #血糖mmol表示,LBDINSI, #胰岛素( pmmol/L),PHAFSTHR #餐后血糖,LBXGH #糖化血红蛋白,SPXNFEV1, #FEV1:第一秒用力呼气量,SPXNFVC #FVC:用力肺活量,ml(估计肺容量),LBDGLTSI #餐后2小时血糖,factor.FVC是我把肺活量分为了2分类,方便用于测试。

把分类变量转成因子

r 复制代码
bc$DMDMARTL<-ifelse(bc$DMDMARTL==1,1,0)
bc$RIAGENDR<-as.factor(bc$RIAGENDR)
bc$RIDRETH1<-as.factor(bc$RIDRETH1)
bc$DMDMARTL<-as.factor(bc$DMDMARTL)
bc$oGTT2<-as.factor(bc$oGTT2)

如果做预测模型要拆分成建模集和验证集。我这里拆分一下

r 复制代码
set.seed(123)
tr1<- sample(nrow(bc),0.7*nrow(bc))##随机无放抽取
bc_train <- bc[tr1,]#70%数据集
bc_test<- bc[-tr1,]#30%数据集

建立抽样调查函数

r 复制代码
bcSvy2<- svydesign(ids = ~ SDMVPSU, strata = ~ SDMVSTRA, weights = ~ WTMEC2YR,
                   nest=TRUE,data = bc_train)

建立生存分析模型

r 复制代码
svyfit <- svycoxph(Surv(time, factor.FVC) ~ RIDAGEYR+RIAGENDR+LBDINSI+RIDRETH1, x = TRUE,
                   design = bcSvy2)

复习一下单个决策曲线模型的内容,绘制复杂加权数据(nhanes数据)决策曲线一共需要2步:

  1. 第一步,把模型变成ggscidca包能够识别的类型
r 复制代码
fit<-scisvycoxphmodel(svyfit,username=username,token=token)
  1. 绘制决策曲线
r 复制代码
scidca(fit)

绘制多模型的决策曲线其实就是复制单个决策曲线的过程,由两种情况:

  1. 就是同一个模型多个时间点的
r 复制代码
fit1<-scisvycoxphmodel(fit=svyfit,timepoint=300,username=username,token=token)

fit2<-scisvycoxphmodel(fit=svyfit,timepoint=500,username=username,token=token)

fit3<-scisvycoxphmodel(fit=svyfit,timepoint=700,username=username,token=token)

制作数据列表的绘图,如果你既往使用过ggscidca包,是一模一样的,上手0困难

r 复制代码
newdat<-list(bc_train,bc_train,bc_train)
cox.tcdca(fit1,fit2,fit3,newdata=newdat,timepoint=c(300,500,700))
  1. 第二个情况就是多个模型同一个时间点的

###多个模型一个时间点

r 复制代码
svyfit1 <- svycoxph(Surv(time, factor.FVC) ~ RIDAGEYR, x = TRUE,
                   design = bcSvy2)

svyfit2 <- svycoxph(Surv(time, factor.FVC) ~ RIDAGEYR+RIAGENDR, x = TRUE,
                    design = bcSvy2)
svyfit3 <- svycoxph(Surv(time, factor.FVC) ~ RIDAGEYR+RIAGENDR+LBDINSI+RIDRETH1, x = TRUE,
                   design = bcSvy2)

因为模型不同,都要转换一遍

r 复制代码
###转换模型
fit1<-scisvycoxphmodel(svyfit1,username=username,token=token)
fit2<-scisvycoxphmodel(svyfit2,username=username,token=token)
fit3<-scisvycoxphmodel(svyfit3,username=username,token=token)

绘图

r 复制代码
newdat<-list(bc_train,bc_train,bc_train)
cox.tcdca(fit1,fit2,fit3,newdata=newdat,timepoint=c(300))

支持自定义颜色

r 复制代码
cox.tcdca(fit1,fit2,fit3,newdata=newdat,timepoint=c(300),lincol =c("#E41A1C", "#377EB8", "#4DAF4A", "#984EA3", "#FF7F00"))
相关推荐
http阿拉丁神猫4 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
不会就选b5 小时前
C++补充部分(一)--lambda 表达式
开发语言·c++
Pniubi8 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知9 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工10 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留10 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu10 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国11 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc12 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu13 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python