Извлечь коэффициенты модели из таблицы `finalfit` - PullRequest
1 голос
/ 20 марта 2019

Краткая версия: возможно ли (кроме обратной обработки отформатированного содержимого ячейки) извлечь коэффициенты из таблицы, содержащей результаты регрессионных моделей, сгенерированных с использованием пакета finalfit?

Справочная информация: Использование(удивительно) finalfit пакет Я могу создать таблицы результатов из регрессионных моделей.Я хочу сообщить о некоторых из этих же результатов в тексте документа Rmarkdown.Я не хочу запускать регрессионные модели дважды, один раз в finalfit для таблиц и один раз для генерации вывода для использования в тексте.Кроме того, finalfit обрабатывает коэффициенты (например, возводит в степень коэффициенты из моделей логистической регрессии для генерации отношений шансов, последовательно форматирует десятичные точки), и я не хочу дублировать эти шаги.

Этот код ниже создает форматированную таблицурезультаты модели логистической регрессии (примечание: намеренно используя базовый код R для модели):

library(finalfit)
library(dplyr)
explanatory = c("age", "sex.factor")
dependent = "mort_5yr"
colon_s %>%
  ## Crosstable
  summary_factorlist(dependent, explanatory, fit_id=TRUE)  %>% 
  ff_merge(
    glm(
      mort_5yr ~ age + sex.factor, family="binomial", data = colon_s
    ) %>% 
  fit2df(estimate_suffix=" (multivariable)")
  ) %>% 
  select(-c(fit_id, index)) %>% 
  dependent_label(colon_s, dependent)

Я не могу понять, как извлечь из этой таблицы соотношение шансов для пола: мужской (или конвейер для получения)it), без запуска и обработки модели glm отдельно.

Извлечение содержимого ячейки напрямую (как предложено @LyzandeR) приводит к этой строке: «0,98 (0,76-1,27, p = 0,888)»соответствующие коэффициенты, доверительные интервалы и P-значение должны быть извлечены.Это почти достигает результата, но не является идеальным, если учесть, что все они были предварительно рассчитаны и объединены в эту строку.

Примечание: я рад достичь желаемого результата, используя другой пакет.

Ответы [ 2 ]

1 голос
/ 26 марта 2019

Тонкая настройка @Ewen для моих собственных предпочтений:

library(finalfit)
library(dplyr)
explanatory = c("age", "sex.factor")
dependent = "mort_5yr"
colon_s %>%
  ## Crosstable
  summary_factorlist(dependent, explanatory, fit_id=TRUE)  %>% 
  ff_merge(
    glm(
      mort_5yr ~ age + sex.factor, family="binomial", data = colon_s
    ) %>% 
      fit2df(condense = FALSE) %>%  
      {coef_multi <<- .} %>% # generate a table of raw coefficients here
      condense_fit(estimate_suffix=" (multivariable)")
  ) %>% 
  select(-c(fit_id, index)) %>% 
  dependent_label(colon_s, dependent)

Примечание: этот подход также можно использовать для коэффициентов из одномерных моделей

Единственным камнем преткновения является получение необработанной сводкистатистика, но на самом деле это не сложно!

1 голос
/ 24 марта 2019

Спасибо за ваш интерес к этому пакету.

Это хорошая мысль, а не то, что мы реализовали, как вы описываете.Вы можете использовать внутренние функции (которые экспортируются), чтобы сделать это.

Не очень красиво, но даст вам таблицу коэффициентов, 95% CI и p-значений в вашем конвейере.

library(finalfit)
library(dplyr)
explanatory = c("age", "sex.factor")
dependent = "mort_5yr"
colon_s %>%
    summary_factorlist(dependent, explanatory, fit_id=TRUE)  %>% 
    ff_merge(
        glmmulti(colon_s, dependent, explanatory)[[1]] %>%  # glmmulti/glm etc. will work
            extract_fit() %>% 
            {coef_table <<- .} %>%  # save an extra table in the pipeline
            condense_fit(estimate_suffix = " (multivariable)") %>% 
            remove_intercept()
    ) %>% 
    select(-c(fit_id, index)) %>% 
    dependent_label(colon_s, dependent)

На тот случай, если вы этого не видели, можно генерировать голые модели без форматирования:

explanatory = c("age", "sex.factor")
dependent = "mort_5yr"
colon_s %>% 
    finalfit(dependent, explanatory, condense = FALSE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...