【问题标题】:multinomial logistic regression results table in wide format using the gtsummary package使用 gtsummary 包的宽格式多项逻辑回归结果表
【发布时间】:2021-02-04 09:16:26
【问题描述】:

我有一个有四个结果的因变量。我使用 mlogit 包进行多项逻辑回归。

当我尝试使用 gtsummary 包呈现结果时,我的多项逻辑回归结果堆叠在一起(参见下面的代码和表格)。

有没有办法让结果并排在一行中,只使用一组标签作为级别,而不是像下表那样堆叠在一起?

# load packages
library(gtsummary)
library(nnet)

# dummy data 
crime <-data.frame(city = sample(c("SF", "AR", "NYC","MN"),13000,replace = TRUE),
                   year = sample(as.factor(c(1990, 2000, 1999, 1989)),13000,replace = TRUE)
                   )

# multinom model tabulated with gtsummary  
multinom(city ~ year, data = crime) %>%
  tbl_regression(exponentiate = T)

【问题讨论】:

  • 你可以添加一个sn-p数据,这样我就可以重现输出表了。
  • 您能否也添加您在会话中使用的所有包?
  • @AbdessabourMtk 和 Mike dummy data plus 使用的包现在包括在内
  • 我无法重现输出。 multinom 函数来自哪个包?是来自nnet 如果是,那么我无法重现图像中显示的表格
  • @AbdessabourMtk,我很抱歉。它来自 nnet 包而不是 multinom。现在会改变它

标签: r mlogit gtsummary


【解决方案1】:

默认情况下,多项模型将以长格式打印。

我编写了一个小函数将结果转换为宽,并将其保存为 GitHub Gist。 https://gist.github.com/ddsjoberg/a55afa74ac58e1f895862fcabab62406


set.seed(20210511)
library(gtsummary)
library(magrittr)

multinom_pivot_wider <- function(x) {
  # check inputs match expectatations
  if (!inherits(x, "tbl_regression") || !inherits(x$model_obj, "multinom")) {
    stop("`x=` must be class 'tbl_regression' summary of a `nnet::multinom()` model.")
  }
  
  # create tibble of results
  df <- tibble::tibble(outcome_level = unique(x$table_body$groupname_col))
  df$tbl <- 
    purrr::map(
      df$outcome_level,
      function(lvl) {
        gtsummary::modify_table_body(
          x, 
          ~dplyr::filter(.x, .data$groupname_col %in% lvl) %>%
            dplyr::ungroup() %>%
            dplyr::select(-.data$groupname_col)
        )
      }
    )
  
  tbl_merge(df$tbl, tab_spanner = paste0("**", df$outcome_level, "**"))
}

# dummy data
crime <-
  data.frame(
    city = sample(c("SF", "AR", "NYC", "MN"), 13000, replace = TRUE),
    year = sample(as.factor(c(1990, 2000, 1999, 1989)), 13000, replace = TRUE)
  )

# multinom model tabulated with gtsummary
tbl <-
  nnet::multinom(city ~ year, data = crime) %>%
  tbl_regression(exponentiate = TRUE) %>%
  multinom_pivot_wider()

【讨论】:

  • 您好 Daniel,感谢您抽出时间回答我的问题。当我尝试运行 tbl_MN 的代码时,我得到以下响应:错误:无法对不存在的列进行子集化。 x 列 groupname_col 不存在。
  • @MohamedYusuf 你熟悉 reprex 吗? (tidyverse.org/help) 使用上面的两个代码块来创建一个reprex,并显示结果。安装正确版本的软件包后,groupname_col 列应该存在。
  • 嗨,Daniel,所以在设置了 reprex 之后,代码似乎可以工作了。我再次运行它,现在它可以正常工作了。不知道我做了什么让它继续下去。谢谢你的回答!!
  • 嗨,Daniel,我认为以下 repo 已关闭 remotes::install_github("ddsjoberg/gtsummary@mice_nnet")。无法运行上述代码,我得到以下响应: modify_table_body(., dplyr::select, -groupname_col) 中的错误:找不到函数“modify_table_body”
  • 安装时关闭除一个以外的所有 R 会话,在新的 R 会话中启动,运行安装代码。仔细阅读日志以获取有关错误的说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2021-05-02
  • 1970-01-01
相关资源
最近更新 更多