Извлечь имя переменной отказа из условий модели Кокса - PullRequest
0 голосов
/ 18 февраля 2019

Мне нужно извлечь имя переменной сбоя из описания модели Кокса в R. Примечание. У меня нет самого объекта, у меня есть terms(coxfit), который был возвращен из сторонней функции.Чтобы привести воспроизводимый пример - предположим, что это модель, созданная в сторонней программе:

library(survival)

test1 <- list(time=c(4,3,1,1,2,2,3), 
              status=c(1,1,1,0,1,1,0), 
              x=c(0,2,1,1,1,0,0), 
              sex=c(0,0,0,0,1,1,1)) 

coxfit <- coxph(Surv(time, status) ~ x + strata(sex), test1)
# Third party program does a bunch of other stuff
# Returns as part of its output the terms for coxfit:
Terms <- terms(coxfit) 

Так что после этого у меня просто есть доступ к терминам:

> Terms
Surv(time, status) ~ x + strata(sex)
attr(,"variables")
list(Surv(time, status), x, strata(sex))
attr(,"factors")
                   x strata(sex)
Surv(time, status) 0           0
x                  1           0
strata(sex)        0           1
attr(,"term.labels")
[1] "x"           "strata(sex)"
attr(,"specials")
attr(,"specials")$strata
[1] 3

attr(,"specials")$cluster
NULL

attr(,"specials")$tt
NULL

attr(,"order")
[1] 1 1
attr(,"intercept")
[1] 1
attr(,"response")
[1] 1
attr(,".Environment")
<environment: R_GlobalEnv>
attr(,"predvars")
list(Surv(time, status), x, strata(sex))
attr(,"dataClasses")
Surv(time, status)                  x        strata(sex) 
       "nmatrix.2"          "numeric"           "factor" 

Что я хочучтобы сделать это извлечь имя переменной сбоя - т.е. в этом случае имя: status.Есть ли простая функция или какой-то другой способ, который даст мне это имя из терминов модели?

1 Ответ

0 голосов
/ 18 февраля 2019

Я не уверен, насколько хорошо это будет работать для того, что вам конкретно нужно сделать.Но это начало

> library(stringi)
> 
> # Convert the formula to character
> terms2 <- as.character(Terms)
> 
> terms2
[1] "~"                  "Surv(time, status)" "x + strata(sex)"   
> 
> # Second element has the variable name of interest
> terms2[2]
[1] "Surv(time, status)"
> 
> # Extract the last word (also removes punctuation)
> stri_extract_last_words(terms2[2])
[1] "status"

Итак, в итоге вы могли бы сделать что-то вроде этого

var_name <- stri_extract_last_words(as.character(Terms)[2])
...