我的目标是使用一个生存对象,在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%的情况下构造相同的东西
pkg:survminer
中的surv_median
-函数本质上是在执行pkg:survival
中运行未暴露的survmean
函数后执行控制台屏幕刮擦操作。(注意需要从包生存中提取三冒号(':::')操作符。)surv_median
使用硬编码的列名,因此无法处理在调用survfit
的结果中用不同的conf.int
参数值构造的fit
对象。如果您想从这样的调用中得到survmean
-函数的输出,这一点也不难。使用您的数据:
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
对"策略"做了什么。列,因为它与survmean
的输出不匹配,但这可能是因为它使用了summary.survfit
,而不是直接使用summary.survfit
调用的函数来进行计算。所以快乐的黑客。