【问题标题】:Extract model coefficients from `finalfit` table从“finalfit”表中提取模型系数
【发布时间】:2019-03-20 11:22:25
【问题描述】:

短版:是否可以(除了对格式化的单元格内容进行反向处理)从报告使用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)

如果不单独运行和处理 glm 模型,我看不出如何从该表(或生成它的管道)中提取 Sex:Male 的优势比。

直接提取单元格内容(如@LyzanderR 所建议)会产生以下字符串:“0.98 (0.76-1.27, p=0.888)” 需要提取相关系数、置信区间和 P 值。这几乎达到了结果,但考虑到它们之前都已计算并连接到此字符串中,因此并不理想。

注意:我很高兴使用不同的包来达到预期的效果。

【问题讨论】:

  • 如果我理解正确你可以加%>% select("OR (multivariable)") %>% slice(3)
  • finalfit 包处理系数并添加括号等以使表格看起来不错。如果我处理格式化表格中的单元格,我将需要再次剥离格式,这相对容易做到,但似乎有点麻烦,并且不适用于其他回归模型或单元格内容(即上面示例中的摘要列) )。

标签: r


【解决方案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)

【讨论】:

  • 谢谢 - 这几乎可以做到,但我已经在附加答案中根据自己的喜好对其进行了调整。
【解决方案2】:

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

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

唯一的症结是获取原始摘要统计信息,但这并不难!

【讨论】:

  • 来自summary_factorlist的统计数据(平均值、中位数等)
猜你喜欢
  • 2018-12-13
  • 1970-01-01
  • 2019-02-17
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 2017-06-18
  • 1970-01-01
相关资源
最近更新 更多