首发ggscidca包,来来来---绘制个不一样的决策曲线,让你审稿人眼前一亮

目前,本人写的ggscidca包已经正式在R语言官方CRAN上线,

在这里插入图片描述
ggscidca包是我本人写的第4个R包,用于绘制如下图这种带条形图的决策曲线。

在这里插入图片描述
ggscidca包可以使用以下代码安装

install.packages("ggscidca")

写这个包的起因是看到了一篇文章Nomograms in Oncology – More than Meets the Eye(肿瘤学的标记图–远不止这些)

在这里插入图片描述
这篇文章提到了一种带条形图的决策曲线,,让我眼前一亮,它把决策曲线分为了和列线图相关部分还有不相关部分,觉得很有意思,因此想看看能不能代码实现一下

在这里插入图片描述

上图这个图形我考虑过ggplot2包的多个函数,如geom_bar,geom_raster,geom_col等,其中geom_col本来最满意,可以绘制出渐变风格的区域条形图,但是geom_col不好嵌入字体(应该是我技术水平还不够,以后水平高了再重新写一下),后面刚好看到其他博主使用geom_rect来复现这个图片,复现得还挺不错的,后面就参考了一部分他的方法,geom_rect主要的有点是灵活多变,可以应对不同的情况。
因为我没有重复造轮子的习惯,我内置了决策曲线发明者AndrewVickers博士提供的stdca.R和dca.r这两个函数的内心代码,用他们来生成绘图数据,因此ggscidca包绘图几乎没错的可能。stdca.R做生存分析时候,有时会报错:Error in findrow(fit, times, extend) : no points selected for one or more curves, consider using the extend argument,我顺手修复了这个小错误。原来stdca.R和dca.r的代码有些过于老旧,我精简了一些代码。函数编写的部分参考了一些ggDCA包的写法,虽然作者一棵树已经删掉这个R包了,但是许多思路还是非常好的。最后对给予我帮助的表示感谢。
下面我来介绍一下怎么使用ggscidca包,其实非常简单,用ggscidca包自带的乳腺癌数据来演示一下

library(ggscidca)
library(survival)
library(reshape2)
library(ggplot2)
bc<-Breastcancer

在这里插入图片描述
age表示年龄,pathsize表示病理肿瘤大小(厘米),lnpos表示腋窝淋巴结阳性,histgrad表示病理组织学等级,er表示雌激素受体状态,pr表示孕激素受体状态,status结局事件是否死亡,pathscat表示病理肿瘤大小类别(分组变量),ln_yesno表示是否有淋巴结肿大,time是生存时间,后面的agec是我们自己设定的,不用管它。
咱们先把分类变量转成因子

bc$histgrad<-as.factor(bc$histgrad)
bc$er<-as.factor(bc$er)
bc$pr<-as.factor(bc$pr)
bc$ln_yesno<-as.factor(bc$ln_yesno)

建立模型

f1<-coxph(Surv(time,status)~er+histgrad+pr+age+ln_yesno,bc)
f2<-coxph(Surv(time,status)~er+histgrad+ln_yesno,bc)
f3<-coxph(Surv(time,status)~ln_yesno,bc)

先绘制个基础的决策曲线,如果你不设置时间的话默认的就是中位数时间

scidca(f1)

在这里插入图片描述
来个60个月,就是5年的

scidca(f1,timepoint = 60)

在这里插入图片描述
如果你没有给你的模型命名,它默认叫model,如果咱们想换个名字

scidca(f2,modelnames = "零基础说科研")

在这里插入图片描述
模型的曲线千奇百怪,这个时候争议来了,我们看上图,红色箭头右边没有数据了,到底算相关还是不相关呢?因此ggscidca包这里还提供了两种解决方案,如果你认为是相关的,咱们可以把上面两个区域合并

scidca(f2,modelnames = "零基础说科研",merge = T)

在这里插入图片描述
或者对X轴进行限制,这样也许更加美观点

scidca(f2,modelnames = "零基础说科研",xstop=0.20)

在这里插入图片描述
生成图形后,如果你想对这个条形图进行调整,也是可以的,要关注函数生成的2行信息

在这里插入图片描述
上图有2个信息,一个是0.0137,一个是0.0069。0.0069表示条形图的高度,0.0137表示绘图区的高度。

在这里插入图片描述
在咱们函数中有个参数pyh是调整条形图的高度的,目前pyh的值就是0.0069,你调整的时候这个值不能超过0.0137,不然就会报错

scidca(f2,modelnames = "零基础说科研",xstop=0.20,pyh = 0.009)

在这里插入图片描述
咱们可以看到经过调整后,图形扁了很多,如果你只想绘制个普通的决策曲线,咱们也可以关掉这个条形图

scidca(f2,colbar = F)
scidca(f2,colbar = F,xstop=0.20)

在这里插入图片描述
下面来介绍一下绘制逻辑回归的决策曲线,也是一样的,先生成一个逻辑回归的模型,其实就是刚才的模型不要时间,演示而已,没有什么实际意义

fit<-glm(status~er+histgrad+pr+age+ln_yesno,family = binomial(link = "logit"),data=bc)

绘图

scidca(fit)

在这里插入图片描述
或者想走普通路线,也是支持的

scidca(fit,colbar=F)

在这里插入图片描述
如果想要做验证集决策曲线,也是很容易的,我重新导入一个数据

load("E:/r/test/LIRI.rda")

在这里插入图片描述
这个数据就不解释了,先分成建模集和验证集,因为涉及到随机拆分,要设置一个种子

set.seed(1)
index <- sample(2,nrow(LIRI),replace = TRUE,prob=c(0.7,0.3))
traindata <- LIRI[index==1,]
testdata <- LIRI[index==2,]

使用建模集建立模型

model1 <- glm(status~ANLN,family = binomial(link = "logit"),data=traindata)

绘图

scidca(model1)

在这里插入图片描述
使用验证集来绘图

scidca(model1,newdata = testdata)

在这里插入图片描述
除此之外,区域的颜色,字体大小和字体颜色都是可以设置的,比如我不喜欢红色和蓝色,我换成黄色和粉红色

scidca(model1,relcol="yellow",irrelcol="hotpink")

在这里插入图片描述
颜色是有点怪,主要是我本人没什么艺术细胞,你可以根据自己喜好吧。中间的字体大小和颜色也是可以调整的

scidca(model1,text.size=6,text.col="black")

在这里插入图片描述
最后我来总结一下,ggscidca包的基本框架基本写好,还有一些功能正待完善,目前还不能做多模型的决策曲线,还有竞争风险模型的决策曲线还不能做,,但是目前框架写好后这个只是时间问题,另外也有粉丝私信我不同机器学习的能不能实现,如下图

在这里插入图片描述
争取在新的版本能实现。有报错或者意见或建议,欢迎公众号私信我。

参考文献:

  1. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4465353/
  2. ggDCA包参考文献
  3. stdca.R和dca.r参考文档
  4. https://mp.weixin.qq.com/s/IrZwwQYCBDT63xH7QtfDvA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值