R语言 如何使用“ggcumin”在累积发生率函数图中添加包含每种事件类型细分的风险表?

zaqlnxep  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(229)

我在这个数据集中有两种类型的事件,我试图在累积发生率图上绘制。

data(Melanoma, package = "MASS")
Melanoma <- Melanoma %>%mutate(
status = as.factor(recode(status, `2` = 0, `1` = 1, `3` = 2)))
###status 0=alive, 1=died from melanoma, 2=dead from other causes

cuminc(Surv(time, status) ~ 1, data = Melanoma) %>% 
ggcuminc(outcome = c("1", "2")) +
labs(
x = "Days") + 
  add_confidence_interval() +
  add_risktable()

字符串


的数据
风险表显示两行:处于风险和事件。
我需要的是一个风险表,显示每个事件的细分。例如,它应该有三行,一行表示处于风险中的人,另一行表示事件1,下一行表示事件2。
我还没找到解决这个问题的方法

fcy6dtqo

fcy6dtqo1#

在ggsurvfit中没有本地的方法来实现这一点。但是包导出的实用程序使其成为可能。下面的示例。

library(ggsurvfit)
#> Loading required package: ggplot2
packageVersion("ggsurvfit")
#> [1] '1.0.0'
library(tidycmprsk)
library(dplyr)

cuminc <- cuminc(Surv(ttdeath, death_cr) ~ 1, trial)

# build a risk table
gg_risktable <- 
  cuminc |> 
  tidy_cuminc(times = c(0, 5, 10, 15, 20)) |> 
  select(outcome, time, n.risk, cum.event) %>%
  {distinct(., time, n.risk) |> 
      mutate(outcome = "At Risk") |> 
      rename(stat = n.risk) |> 
      bind_rows(select(., outcome, time, stat = cum.event))} |> 
  ggplot(aes(x = time, y = factor(outcome), label = stat)) +
  geom_text(size = 3) +
  labs(y = NULL, x = NULL) +
  theme_light() +
  theme(
    panel.grid.minor = element_blank(),
    panel.grid.major = element_blank()
  )
gg_risktable

字符串
x1c 0d1x的数据

# build a cuminc plot
gg_cuminc <- 
  cuminc |> 
  ggcuminc(outcome = c("death from cancer", "death other causes")) +
  scale_ggsurvfit()

# align and combine plots
gg_combined <- ggsurvfit_align_plots(list(gg_cuminc, gg_risktable))
patchwork::wrap_plots(
  gg_combined[[1]], 
  gg_combined[[2]], 
  ncol = 1,
  heights = c(1, 0.2)
)



创建于2023-11-01使用reprex v2.0.2

polhcujo

polhcujo2#

检查Melanomedata.frame和ggcuminc函数的参数,我理解您希望可视化事件的累积发生率1=死于黑素瘤2=死于其他原因

data(Melanoma, package = "MASS")
Melanoma <- Melanoma %>% mutate(status = as.factor(recode(status, `2` = 0, `1` = 1, `3` = 2))) 
Melanoma %>% count(status)
  status   n
1      1  57
2      2 134
3      3  14

字符串
因此,将患者的状态分配为0是没有意义的。不可能知道这些患者的死亡原因。

df.death <- Melanoma %>% filter(status != 0)


所有患者均显示事件(死于黑色素瘤死于其他原因),因此状态固定为1。尽管必须在状态中定义水平,但没有删失元素。

df.status <- df.death %>% mutate(death=status) %>% mutate(death=factor(death,levels=c(1,2))) %>%
  mutate(status = 1) %>% mutate(status=factor(status,levels=c(0,1)))


将两起事件(1和2)的累积发生率与风险表(风险和事件)一起绘制

cuminc(Surv(time, status) ~ death, df.event) %>% 
  ggcuminc(outcome = c("1")) +
  labs(
    x = "Days") + 
  add_confidence_interval() +
  add_risktable()


的数据

相关问题