从“ finalfit”表中提取模型系数

时间:2019-03-20 11:22:25

标签: r

简短版本:是否可以(除了对格式化的单元格内容进行反向处理之外)从表中提取系数,该表报告使用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)

我看不到如何从此表(或生成它的管道)中提取出Sex:Male的优势比,而无需分别运行和处理glm模型。

直接提取单元格内容(由@LyzandeR建议)将导致以下字符串:“ 0.98(0.76-1.27,p = 0.888)” 需要提取相关系数,置信区间和P值。这样几乎可以达到结果,但考虑到它们以前都已计算并包含在此字符串中,因此不理想。

注意:我很高兴使用其他软件包来达到预期的效果。

2 个答案:

答案 0 :(得分:1)

感谢您对此软件包的关注。

这是一个好主意,而不是您所描述的已实现的事情。您可以使用内部函数(已导出)来执行此操作。

不太漂亮,但是会为您提供管道中的系数,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)

答案 1 :(得分:1)

根据自己的喜好调整@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)

注意:这种方法也可以用于单变量模型的系数

唯一的症结在于获取原始的摘要统计信息,但这确实并不棘手!