2017-04-12 82 views
0

我想创建一个网格/分面图以查看我的数据中几个组的累积发病率。于是,我开始与如何在R中绘制网格/小平面样式中的累积发生率图?

library(rms) 
library(dplyr) 

data(colon) 
fit1 <- npsurv(Surv(time, status) ~ 1, data = colon %>% filter(rx=="Obs")) 
survplot(fit1, fun = function(x) 1-x) 
fit2 <- npsurv(Surv(time, status) ~ 1, data = colon %>% filter(rx=="Lev")) 
survplot(fit2, fun = function(x) 1-x) 
fit3 <- npsurv(Surv(time, status) ~ 1, data = colon %>% filter(rx=="Lev+5FU")) 
survplot(fit3, fun = function(x) 1-x) 

然后我被卡住把三个地块一起显示在顶部每个区组的名称。我不喜欢mfrowmfcol解决方案。有人可以解释如何使用latticeggplot2来做到这一点?

谢谢你的帮助!

回答

1

一个tidyverse方法 - 使用purrr::mappurrr:map_df到适合的rx每个级别的模型。 1 - x部分留给读者练习。唯一的'魔术'部分是使用mget来将npsurv的列表式结果进行子集化,以仅获取该图所需的列。

library(rms) 
library(tidyverse) 
data(colon) 

colon %>% 
    split(.$rx) %>% 
    map(~ npsurv(Surv(time, status) ~ 1, data = .)) %>% 
    map_df(~ mget(c("surv", "upper", "lower", "time"), 
       as.environment(.)) %>% 
      data.frame, 
     .id = "rx") %>% 
    ggplot(aes(time)) + 
    geom_ribbon(aes(ymin = lower, ymax = upper), fill = "gray80") + 
    geom_line(aes(y = surv)) + 
    facet_wrap(~ rx) 

Survival as a trellis plot

0

我想出了自己。这里是我的解决方案

require(rms) 
require(dplyr) 
data(colon) 
dat <- list() 
for (i in 1:length(unique(colon$rx))) { 
    j = sort(unique(colon$rx))[i] 
    fit <- npsurv(Surv(time, status) ~ sex, data = colon%>%filter(rx == j)) 
    dat[[i]] <- data.frame(Time = fit$time, 
          Probability = 1 - fit$surv, 
          Group = c(rep("Male", fit$strata[1]), rep("Female", fit$strata[2])), 
          Center = j) 
} 
data_all <- do.call(rbind, dat) 
data_all$Group <- factor(data_all$Group, levels = c("Male", "Female")) 

require(lattice) 
p <- xyplot(Probability ~ Time| Center, group = Group, data = data_all, 
      grid = T, type = "l", 
      auto.key = list("top", lines = T, points = F), 
      par.settings = list(lwd = 2)) 
p