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

Вопрос, состоящий из двух частей: во-первых, у меня есть список из n переменных во фрейме данных, которые я хочу последовательно заменить в модели выживания (таким образом создав n новых моделей), и из вывода каждой я хочу сохранить только сводку строка таблицы (HR, SE и т. д.), связанная с этой переменной (таким образом, таблица из n строк).

#create list of variables from dataset
bloods <- colnames(data)[c(123,127, 129:132, 135:140, 143:144, 190:195)] 

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

for (i in 1:length(bloods)){
x <- coxph(Surv(time, event) ~ i + var1+var2+var3, data=data, na.action=na.omit) 
}

Не знаете, как каждый раз выбирать и добавлять первую строку сводной таблицы (summary(x)[7]) в таблицу? Я полагаю, я должен создать таблицу перед циклом?

Любая помощь очень ценится!


person C. W.    schedule 09.01.2017    source источник
comment
Приносим извинения - существующий цикл for не работает из-за различий в длинах переменных ошибок (найдено для 'i')   -  person C. W.    schedule 09.01.2017
comment
Беглый взгляд: цикл сохраняет только последнее значение для [i] и принимает числовые значения, а не переменную, поэтому я думаю, что это не работает. Кроме того, было бы интересно предоставить образец данных, см. stackoverflow.com/help/how-to-ask   -  person PereG    schedule 09.01.2017


Ответы (1)


Рассмотрим lapply в построении динамической формулы, которая приведет к списку сводных таблиц:

bloods <- colnames(data)[c(123,127, 129:132, 135:140, 143:144, 190:195)] 

sumtables <- lapply(bloods, function(i) {
      # STRING INTERPOLATION WITH sprintf, THEN CONVERTED TO FORMULA OBJECT
      iformula <- as.formula(sprintf("Surv(time, event) ~ %s + var1+var2+var3", i))  

      # RUN MODEL REFERENCING DYNAMIC FORMULA
      x <- coxph(iformula, data=data, na.action=na.omit)

      # RETURN COEFF MATRIX RESULTS
      summary(x)[7][[1]] 
})
person Parfait    schedule 09.01.2017
comment
Большое спасибо Parfait, похоже, это работает! Никогда раньше не использовал sprintf, умница! - person C. W.; 10.01.2017