目前,本人写的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包的基本框架基本写好,还有一些功能正待完善,目前还不能做多模型的决策曲线,还有竞争风险模型的决策曲线还不能做,,但是目前框架写好后这个只是时间问题,另外也有粉丝私信我不同机器学习的能不能实现,如下图

争取在新的版本能实现。有报错或者意见或建议,欢迎公众号私信我。
参考文献:
- https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4465353/
- ggDCA包参考文献
- stdca.R和dca.r参考文档
- https://mp.weixin.qq.com/s/IrZwwQYCBDT63xH7QtfDvA


5359

被折叠的 条评论
为什么被折叠?



