Таблица результатов регрессии Кокса или график в R - PullRequest
2 голосов
/ 24 января 2020

У меня есть регрессия Кокса, в которой используется strata() и tt().

Есть ли какой-нибудь пакет, который помогает производить хорошо выглядящий, информативный вывод результатов в формате таблицы? В то время как ggforest() обрабатывает tt(), он не обрабатывает strata()

Я ищу какой-либо способ получения подходящего вывода, кроме печати summary(coxph). Неважно, является ли это латексом или HTML.

. Пока единственное решение - создать стол самостоятельно, но это не выглядит достаточно привлекательным, чтобы его можно было положить в бумагу ...

Вот фиктивный набор данных:

set.seed(132456)
'dummy survival data'
df<-data.frame(id=seq(1,1000,1), event=rep(0,1000),time=floor(runif(1000,7,10)),group=floor(runif(1000,0,2)), 
               var1 = rnorm(1000, 1, 3), var2 = seq(1,1000))
'set events for a few random subjects'

id_list<-c(as.numeric(floor(runif(500,1,1000))))
df$event[df$id %in% id_list]<-1

'set survival times for events'
t_list<-c(as.numeric(floor(runif(394,1,5))))
df2<-df[df$event==1,]
df2$time<-t_list


'combine data'
df<-rbind(df,df2)
summary(df)

'Set up surfit '
require(survminer)
KM_fit<-coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df)

ggforest() возвращает следующую ошибку:

> ggforest(KM_fit)
Error in `[.data.frame`(data, , var) : undefined columns selected
additional warning:
In .get_data(model, data = data) :
  The `data` argument is not provided. Data will be extracted from model fit.

Функция ggforest() работает, если не указан strata. Но модель, с которой я имею дело, использует это .... так что никакого решения.

Следующее возвращает очень простую c таблицу, которую, если бы я знал немного больше о планировке, можно было бы использовать, но на самом деле это не красиво!

# Prepare the columns
beta <- coef(KM_fit)
se   <- sqrt(diag(KM_fit$var))
p    <- 1 - pchisq((beta/se)^2, 1)
CI <- round(exp(confint(KM_fit)), 2)

# Bind columns together, and select desired rows
res <- cbind(beta, se = exp(beta), CI, p)


# Print results in a LaTeX-ready form
knitr::kable(
xtable(res)
)

Благодарен за любую советы и хитрости!

Спасибо большое!

тоже попробовал finalfit() безуспешно ....

1 Ответ

3 голосов
/ 25 января 2020

Вот несколько вариантов, в зависимости от того, что вы хотите включить в ваш финальный стол.

coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df) %>% 
  finalfit::fit2df() %>% 
  knitr::kable()

coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df) %>% 
  finalfit::fit2df(condense = FALSE) %>% 
  knitr::kable()

coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df) %>% 
  broom::tidy(exp = TRUE)

Редактировать

Аргумент digits предназначен для использования со сжатым выходом. Если вы выводите значения в виде цифр c, они не округляются, пока вы не напечатаете. Итак, вот два варианта.

> coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df) %>% 
+   finalfit::fit2df(digits = c(3,3,3)) %>% 
+   knitr::kable()


|explanatory |HR                           |
|:-----------|:----------------------------|
|tt(var2)    |0.998 (0.995-1.001, p=0.211) |
|var1        |1.006 (0.983-1.029, p=0.616) |
> 
> coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df) %>% 
+   finalfit::fit2df(condense = FALSE) %>% 
+   knitr::kable(digits = c(0, 2, 3, 4, 5))


|explanatory |   HR|   L95|    U95|       p|
|:-----------|----:|-----:|------:|-------:|
|tt(var2)    | 1.00| 0.995| 1.0010| 0.21097|
|var1        | 1.01| 0.983| 1.0294| 0.61612|
> 

Редактировать 2 В Finalfit легко пометить переменные. Проблема tt() в настоящее время не поддерживается.

df %>% 
  mutate(
    var1 = ff_label(var1, "Pretty var1"),
    var2 = ff_label(var2, "Also very pretty var2"),
    group = factor(group) %>% 
      ff_label("Group (strata)")
    ) %>% 
  finalfit("Surv(time, event)", c("var1", "var2", "strata(group)"), column = TRUE)

 Dependent: Surv(time, event)                     all          HR (univariable)        HR (multivariable)
                  Pretty var1 Mean (SD)     0.9 (3.1) 1.01 (0.98-1.03, p=0.636) 1.01 (0.98-1.03, p=0.646)
        Also very pretty var2 Mean (SD) 504.5 (288.3) 1.00 (1.00-1.00, p=0.479) 1.00 (1.00-1.00, p=0.484)
               Group (strata)         0    714 (51.2)                         -                         -
                                      1    680 (48.8)                         -                         -

Как вы сказали, вы можете просто отредактировать простую таблицу вручную

coxph(Surv(time , event) ~ tt(var2) + strata(group)+ var1 ,data= df) %>% 
  finalfit::fit2df(condense = FALSE) %>%
  mutate(
    explanatory = c("Pretty var2 (time dependent)", "Also pretty var1")
  ) %>% 
  knitr::kable(digits = c(3,3,3,3,3))

|explanatory                  |    HR|   L95|   U95|     p|
|:----------------------------|-----:|-----:|-----:|-----:|
|Pretty var2 (time dependent) | 0.998| 0.995| 1.001| 0.211|
|Also pretty var1             | 1.006| 0.983| 1.029| 0.616|

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