gpt4 book ai didi

r - 用ggplot2在R中绘制生存曲线

转载 作者:行者123 更新时间:2023-12-04 07:53:48 25 4
gpt4 key购买 nike

我一直在寻找使用ggplot2绘制生存曲线的解决方案。我找到了一些不错的示例,但是它们并没有遵循ggplot2的全部美学原理(主要是关于阴影置信区间等)。所以最后我写了我自己的函数:

ggsurvplot<-function(s, conf.int=T, events=T, shape="|", xlab="Time", 
ylab="Survival probability", zeroy=F, col=T, linetype=F){

#s: a survfit object.
#conf.int: TRUE or FALSE to plot confidence intervals.
#events: TRUE or FALSE to draw points when censoring events occur
#shape: the shape of these points
#zeroy: Force the y axis to reach 0
#col: TRUE, FALSE or a vector with colours. Colour or B/W
#linetype: TRUE, FALSE or a vector with line types.

require(ggplot2)
require(survival)

if(class(s)!="survfit") stop("Survfit object required")

#Build a data frame with all the data
sdata<-data.frame(time=s$time, surv=s$surv, lower=s$lower, upper=s$upper)
sdata$strata<-rep(names(s$strata), s$strata)

#Create a blank canvas
kmplot<-ggplot(sdata, aes(x=time, y=surv))+
geom_blank()+
xlab(xlab)+
ylab(ylab)+
theme_bw()

#Set color palette
if(is.logical(col)) ifelse(col,
kmplot<-kmplot+scale_colour_brewer(type="qual", palette=6)+scale_fill_brewer(type="qual", palette=6),
kmplot<-kmplot+scale_colour_manual(values=rep("black",length(s$strata)))+scale_fill_manual(values=rep("black",length(s$strata)))
)
else kmplot<-kmplot+scale_fill_manual(values=col)+scale_colour_manual(values=col)

#Set line types
if(is.logical(linetype)) ifelse(linetype,
kmplot<-kmplot+scale_linetype_manual(values=1:length(s$strata)),
kmplot<-kmplot+scale_linetype_manual(values=rep(1, length(s$strata)))
)
else kmplot<-kmplot+scale_linetype_manual(values=linetype)

#Force y axis to zero
if(zeroy) {
kmplot<-kmplot+ylim(0,1)
}

#Confidence intervals
if(conf.int) {

#Create a data frame with stepped lines
n <- nrow(sdata)
ys <- rep(1:n, each = 2)[-2*n] #duplicate row numbers and remove the last one
xs <- c(1, rep(2:n, each=2)) #first row 1, and then duplicate row numbers
scurve.step<-data.frame(time=sdata$time[xs], lower=sdata$lower[ys], upper=sdata$upper[ys], surv=sdata$surv[ys], strata=sdata$strata[ys])

kmplot<-kmplot+
geom_ribbon(data=scurve.step, aes(x=time,ymin=lower, ymax=upper, fill=strata), alpha=0.2)
}

#Events
if(events) {
kmplot<-kmplot+
geom_point(aes(x=time, y=surv, col=strata), shape=shape)
}

#Survival stepped line
kmplot<-kmplot+geom_step(data=sdata, aes(x=time, y=surv, col=strata, linetype=strata))

#Return the ggplot2 object
kmplot
}

我编写了每个层使用for循环的先前版本,但速度较慢。由于我不是程序员,因此我寻求改善功能的建议。也许添加一个有风险患者的数据表,或者更好地集成到ggplot2框架中。

谢谢

最佳答案

对于CI之间带有阴影区域的内容,您可以尝试以下操作:

(我在这里使用开发版本,因为生产版本中的参数alpha存在一个缺陷(对于非默认值,正确地阴影了上方矩形)。否则功能相同)。

library(devtools)
dev_mode(TRUE) # in case you don't want a permanent install
install_github("survMisc", "dardisco")
library("survMisc", lib.loc="C:/Users/c/R-dev") # or wherever you/devtools has put it
data(kidney, package="KMsurv")
p1 <- autoplot(survfit(Surv(time, delta) ~ type, data=kidney),
type="fill", survSize=2, palette="Pastel1",
fillLineSize=0.1, alpha=0.4)$plot
p1 + theme_classic()
dev_mode(FALSE)

给予:

对于经典的图表和表格:
autoplot(autoplot(survfit(Surv(time, delta) ~ type, data=kidney),
type="CI"))

有关更多选项,请参见 ?survMisc::autoplot.survfit?survMisc::autoplot.tableAndPlot

关于r - 用ggplot2在R中绘制生存曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22921457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com