Кривая выживаемости модели Вейбулла, на которую неправильно влияет фактор (категориальный) ковариата в R - PullRequest
0 голосов
/ 01 мая 2020

Я сделал серию кривых выживания в R и обнаружил, что для меня это не имеет смысла:

  • Анализ 1: для всей выборки я создал кривые с 2 ковариатами ( пол = M / F (двоичный), а функция задания = A, B или C), которые оба учитываются. Это дало 6 общих кривых (M, A; M, B; M, C; F, A; F, B; и F, C).
  • Анализ 2: Я отфильтровал до заданных значений c задание на работу заранее (скажем, A), затем была создана кривая выживания только с гендерным ковариатом. В результате получается всего 2 кривых (M, A; F, A)

. Проблема в том, что кривые M, A и F, A в Анализе 1 не совпадают с кривыми в Анализе 2. На самом деле, M, A в Анализе 1 имеет более длинную кривую выживания, тогда как F, A имеет более длинную кривую выживания в Анализе 2. Я ожидал бы, что они будут очень похожи, если не точно такими же, потому что я думал, что использование категориального (факторизованного) ковариата по существу, анализ выживаемости делится на 3 отдельных поданализа (2 кривых для каждой функции работы). Таким образом, предварительно отфильтровав только одну функцию работы, а затем запустив кривую выживания с использованием только полового ковариата, я предположил, что это будет репликация первых двух кривых анализа 1 (M, A и F, A). Ниже приведены, например, данные и код:

library(survival)
library(survminer)
library(reshape2)
library(lubridate)
library(zoo)
library(tidyverse)

Данные:

gender <- ifelse(rnorm(100) <= 0.5, 0, 1)
time <- round(abs(sample(1:100, 100)))
event_occurred <- ifelse(rnorm(100) <= 0.5, 0, 1)
job_function <- sample(1:3, 100, replace = TRUE)
df <- data.frame(cbind(gender, time, event_occurred, job_function))

df <- df %>%
  mutate(gender = ifelse(gender == 0, "Male", "Female"),
         job_function = ifelse(job_function == 1, "A",
                        ifelse(job_function == 2, "B", "C"))) %>%
  mutate(gender = factor(gender),
         job_function = factor(job_function))

После подготовки данных я выполнил анализ 1:

surv_prob <- seq(0.99, 0.01, by = -.01)

wb_curve1 <- survreg(Surv(time, event_occurred) ~ gender + job_function, data = df)
coef(wb_curve1)

newdat1 <- expand.grid(gender = c("Male", "Female"), job_function = c("A", "B", "C"))

time_point1 <- predict(wb_curve1, type = "quantile", p = (1 - surv_prob), newdata = newdat1)

surv_wbcurve_wide1 <- cbind(newdat1, time_point1)

surv_wbcurve1 <- melt(surv_wbcurve_wide1, id.vars = c("gender", "job_function"), variable.name = "surv_id", value.name = "time")

surv_wbcurve1$surv <- surv_prob[as.numeric(surv_wbcurve1$surv_id)]
surv_wbcurve1[, c("upper", "lower", "std.err", "strata")] <- NA

ggsurvplot_df(surv_wbcurve1, 
              surv.geom = geom_line,
              linetype = "gender",
              color = "job_function", 
              legend.title = NULL,
              surv.scale = "percent")

Анализ 2 :

df2 <- df %>%
  filter(job_function == "A")

wb_curve2 <- survreg(Surv(time, event_occurred) ~ gender, data = df2)
coef(wb_curve2)

newdat2 <- expand.grid(gender = c("Male", "Female"))

time_point2 <- predict(wb_curve2, type = "quantile", p = (1 - surv_prob), newdata = newdat2)

surv_wbcurve_wide2 <- cbind(newdat2, time_point2)

surv_wbcurve2 <- melt(surv_wbcurve_wide2, id.vars = c("gender"), variable.name = "surv_id", value.name = "time")

surv_wbcurve2$surv <- surv_prob[as.numeric(surv_wbcurve2$surv_id)]
surv_wbcurve2[, c("upper", "lower", "std.err", "strata")] <- NA

ggsurvplot_df(surv_wbcurve2, 
              surv.geom = geom_line,
              color = "gender", 
              legend.title = NULL,
              surv.scale = "percent",
              xlim = c(0, 150)) +
  geom_hline(yintercept = 0.5)

С этими поддельными данными вы обнаружите изменения гендерного коэффициента между анализом 1 и 2. Кроме того, хотя кривые очень схожи в этих выборочных данных, результирующие кривые с моими фактическими данными очень разные (M, A имеет более длинную кривую выживания в анализе 1, в то время как F, A имеет более длинную кривую выживания в анализе 2). Кроме того, разница между кривыми M, A и F, A в Анализе 1 очень велика (в масштабе 1-2 года выживания), но очень мала в Анализе 2 (около 1-2 месяцев).

Пожалуйста, дайте мне знать, если есть причина, почему я нахожу эти различия между анализами. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...