r语言 - 在90%置信水平下,如何用上下限置信限估计中位生存期?



我的目标是使用一个生存对象,在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调用的函数来进行计算。所以快乐的黑客。

最新更新