【问题标题】:Gtsummary columns for all post hoc pairwise comparisons所有事后成对比较的 Gtsummary 列
【发布时间】:2022-01-04 19:31:55
【问题描述】:

gtsummary 目前是否有一种方法可以为事后测试的每个成对比较的 p 值创建列?例如,假设有 4 个组,是否有一个函数将 p 值作为单独的列包含

  1. 整体 anova 或卡方取决于是连续的还是分类的
  2. a vs b
  3. a vs c
  4. a vs d
  5. b vs c
  6. b vs d
  7. c vs d

【问题讨论】:

    标签: r gtsummary


    【解决方案1】:

    您可以使用add_stat() 函数将自定义列和行添加到tbl_summary() 表中。下面的示例使用pairwise.t.test() 来计算成对的 p 值(您可以使用任何您喜欢的方法)。

    library(gtsummary)
    packageVersion("gtsummary")
    #> [1] '1.5.0'
    # set theme to get MEAN (SD) by default in `tbl_summary()`
    theme_gtsummary_mean_sd()
    
    # function to add pairwise copmarisons to `tbl_summary()`
    add_stat_pairwise <- function(data, variable, by, ...) {
      # calculate pairwise p-values
      pw <- pairwise.t.test(data[[variable]], data[[by]], p.adj = "none")
    
      # convert p-values to list
      index <- 0L
      p.value.list <- list()
      for (i in seq_len(nrow(pw$p.value))) {
        for (j in seq_len(nrow(pw$p.value))) {
          index <- index + 1L
          
          p.value.list[[index]] <- 
            c(pw$p.value[i, j]) %>%
            setNames(glue::glue("**{colnames(pw$p.value)[j]} vs. {rownames(pw$p.value)[i]}**"))
        }
      }
      
      # convert list to data frame
      p.value.list %>% 
        unlist() %>%
        purrr::discard(is.na) %>%
        t() %>%
        as.data.frame() %>%
        # formatting/roundign p-values
        dplyr::mutate(dplyr::across(everything(), style_pvalue))
    }
    
    trial %>%
      select(grade, age, marker) %>%
      tbl_summary(by = grade, missing = "no") %>%
      # add pariwaise p-values
      add_stat(everything() ~ add_stat_pairwise) %>%
      as_kable() # convert to kable to display on Stackoverflow
    
    Characteristic I, N = 68 II, N = 68 III, N = 64 I vs. II I vs. III II vs. III
    Age 46 (15) 48 (14) 48 (14) 0.6 0.4 0.8
    Marker Level (ng/mL) 1.07 (0.89) 0.68 (0.73) 1.00 (0.92) 0.010 0.6 0.040

    reprex package (v2.0.1) 于 2021 年 11 月 26 日创建

    【讨论】:

    • 您能否提供一个可以同时灵活用于分类和连续的解决方案?我会自己实现这个,但我不清楚我应该在我的 if 逻辑中包含什么。喜欢if is.numeric(var): do pairwise t tests, if is.factor(var): do chi square。具体来说,我可以在这里的var 部分输入什么?一旦我有了它应该很容易
    • ^^使用与 gtsummary 相同的逻辑的函数来查找变量是分类还是连续的方法将是正确的答案,但作为替代方案,您能否解释一种适用于您的替代方案有 2 个功能 1. 一个像您建议的那样使用成对 t 检验,2. 一个使用来自 RVAideMemoire 包的 chisq.multcomp 等卡方事后方法。我正在努力按原样实现 chisq.multcomp 函数,因为我不清楚如何获取表中的每一行/变量,因此我可以将其转换为矩阵
    • 您需要编写一个使用chisq.multcomp() 而不是pairwise.t.test() 的新函数,它以相同的方式准备输出。然后将add_stat() 调用更新为add_stat(list(all_continuous() ~ add_stat_pairwise), all_categorical() ~ add_stat_pairwise_chisq))
    • 刚刚将您添加到聊天室。非常感谢您的见解,以便我可以开始为 gtsummary 制作自己的函数!
    • 我不确定那是什么供参考
    猜你喜欢
    • 2013-11-24
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多