1

我的目标是使用 survfit 对象在 90% 置信水平的中位数置信上限和下限的情况下估计中位存活率。

churn_dat <-read_csv("https://raw.githubusercontent.com/square/pysurvival/master/pysurvival/datasets/churn.csv")
churn_dat <- churn_dat %>% filter(months_active > 0)
#create a function of  the dataframe by sizes
boot <- function(size,n_sims){
#1. filter data into a particular size
df <- churn_dat %>% filter(company_size == size)
n = nrow(df)
#2. run the bootstrap
experiments = tibble(experiment = rep(1:n_sims, each = n),
                     index = sample(1:n, size = n * n_sims, replace = TRUE),
                     time_star = df$months_active[index],
                     event_star = df$churned[index])
return(experiments)
}


#create a function for plotting
plot_boot_data <- function(experiments){
  fit <- survfit(Surv(time_star, event_star) ~ experiment, data = experiments)
  #get the median of surv
  med <- surv_median(fit)
  med <- data.frame(med = med$median)
  ggplot(med , aes(x = med, fill= med)) +
    geom_histogram(binwidth = .8)+theme_bw()
}
df_10to50 <- boot("10-50",10)
plot_boot_data(df_10to50)

我找到了类似的函数,即 surv_median() 来执行此操作,但置信度为 95 %

如何在置信水平设置为 90 % 的情况下构建相同的东西

4

1 回答 1

0

pkg: 中的surv_median-function 本质上是在执行 pkg:中的非公开函数survminer后执行控制台屏幕抓取操作的人所做的事情。(请注意,对于生存包中的三冒号 (':::') 提取运算符的需要。)使用硬编码的列名,因此无法处理使用不同参数值构造的 -object调用的结果。如果你想从这样的调用中得到 -function 的输出,那一点也不难。使用您的数据:survmeansurvivalsurv_medianfitconf.intsurvfitsurvmean

fit <- survfit(Surv(time_star, event_star) ~ experiment, data = df_10to50, conf.int=0.9)
med <- survival:::survmean(fit,rmean=FALSE)
med  # result is a named list
#------------
$matrix
              records n.max n.start events    rmean se(rmean) median 0.9LCL 0.9UCL
experiment=1      673   673     673    298 7.347565 0.2000873      7      5     12
experiment=2      673   673     673    309 7.152863 0.2028425      6      5     10
experiment=3      673   673     673    298 7.345891 0.2068490      9      5     12
experiment=4      673   673     673    323 7.035011 0.1981676      5      4      7
experiment=5      673   673     673    313 7.044400 0.2074104      6      5      9
experiment=6      673   673     673    317 7.061878 0.2021348      6      4      9
experiment=7      673   673     673    311 7.029602 0.2081835      5      4      9
experiment=8      673   673     673    301 7.345766 0.2032876      9      6     10
experiment=9      673   673     673    318 6.912700 0.2050143      7      5      9
experiment=10     673   673     673    327 6.988065 0.1990601      5      4      7

$end.time
 [1] 12 12 12 12 12 12 12 12 12 12

如果您想要 0.9 置信水平的中位数和界限,可以通过以下方式获得:

med$matrix[ 1 , 7:9]  # using numbers instead of column names.
#----------
median 0.9LCL 0.9UCL 
     7      5     12 

恐怕没有足够的描述你到达那里的过程的目标让我理解 dplyr/magrittr 逻辑链,所以我无法填写引导函数或处理其输出ggplot2。我最初很困惑,因为您使用的是一个名为的函数boot,并且我认为您正在执行引导分析,但似乎没有任何机制可以获取任何引导结果,即没有随机选择可索引数据集中的行。

如果您仍想制作 surv_median 的专用变体,您可以尝试在代码中修改此行:

.table <- .table %>% dplyr::select_(
                       .dots = c("strata", "median", "`0.95LCL`", "`0.95UCL`"))

我无法弄清楚surv_median“strata”列在做什么,因为它与 的输出不匹配survmean,但这可能是因为它正在使用summary.survfit而不是直接转到summary.survfit调用进行计算的函数。很高兴黑客。

于 2021-09-11T16:23:58.670 回答