gpt4 book ai didi

r - 在 ggplot 或点阵中使用 Surv 对象

转载 作者:行者123 更新时间:2023-12-04 19:21:38 28 4
gpt4 key购买 nike

任何人都知道如何利用ggplot或lattice进行生存分析?制作网格或类似面的生存图会很好。

所以最后我玩了一会儿,找到了 Kaplan-Meier 情节的解决方案。我为将列表元素放入数据框中的困惑代码道歉,但我想不出另一种方法。

注意:它仅适用于两层地层。如果有人知道我如何使用 x<-length(stratum)要做到这一点,请让我知道(在 Stata 中,我可以附加到一个宏 - 不确定这在 R 中是如何工作的)。

ggkm<-function(time,event,stratum) {

m2s<-Surv(time,as.numeric(event))

fit <- survfit(m2s ~ stratum)

f$time <- fit$time

f$surv <- fit$surv

f$strata <- c(rep(names(fit$strata[1]),fit$strata[1]),
rep(names(fit$strata[2]),fit$strata[2]))

f$upper <- fit$upper

f$lower <- fit$lower

r <- ggplot (f, aes(x=time, y=surv, fill=strata, group=strata))
+geom_line()+geom_ribbon(aes(ymin=lower,ymax=upper),alpha=0.3)

return(r)
}

最佳答案

我一直在lattice中使用以下代码.第一个函数为一组绘制 KM 曲线,通常用作 panel.group函数,而第二个为整个面板添加对数秩检验 p 值:

 km.panel <- function(x,y,type,mark.time=T,...){
na.part <- is.na(x)|is.na(y)
x <- x[!na.part]
y <- y[!na.part]
if (length(x)==0) return()
fit <- survfit(Surv(x,y)~1)
if (mark.time){
cens <- which(fit$time %in% x[y==0])
panel.xyplot(fit$time[cens], fit$surv[cens], type="p",...)
}
panel.xyplot(c(0,fit$time), c(1,fit$surv),type="s",...)
}

logrank.panel <- function(x,y,subscripts,groups,...){
lr <- survdiff(Surv(x,y)~groups[subscripts])
otmp <- lr$obs
etmp <- lr$exp
df <- (sum(1 * (etmp > 0))) - 1
p <- 1 - pchisq(lr$chisq, df)
p.text <- paste("p=", signif(p, 2))
grid.text(p.text, 0.95, 0.05, just=c("right","bottom"))
panel.superpose(x=x,y=y,subscripts=subscripts,groups=groups,...)
}

审查指标必须为 0-1 才能使此代码工作。用法如下:
library(survival)
library(lattice)
library(grid)
data(colon) #built-in example data set
xyplot(status~time, data=colon, groups=rx, panel.groups=km.panel, panel=logrank.panel)

如果你只是使用 'panel=panel.superpose' 那么你不会得到 p 值。

关于r - 在 ggplot 或点阵中使用 Surv 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953641/

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