从 tbl_merge 对象计算 p 值?

Calculating p-values from a tbl_merge object?

我一直在使用 R 函数 gtsummary,但现在 运行 遇到变量存在于彼此子集中的问题。我有两个可以独立地相互呈阳性的筛选测试,这造成了使用 by = with tbl_summary 的问题。这导致我创建两个单独的 tables 并将它们与 tbl_merge 函数组合。

但是,我想计算测试之间差异的 p 值。有什么方法可以用 table_merge 格式的对象来执行此操作,或者从中提取信息并计算我需要的统计信息?

根据请求,我 post 来自 mtcars 数据库的代码示例。

示例代码---------------------------------------- ------------------

data(mtcars)

mtcars_tab <- mtcars %>%
  mutate(
    drat_4 = ifelse(drat >= 4, 1, 0),
    wtp_3 = ifelse(wt >= 3, 1, 0),
    testp = ifelse(drat_4 == 1 | wtp_3 == 1, 1, 0)) %>% 
  select(testp,vs,am)

tab <- 
  tbl_summary(mtcars_tab,
              missing = "no",
              by = testp
              ) %>% 
  add_p

tab

Table 1

我想要的是 table 分成一列,其中 drat_4 为正,另一列 wtp_3 为正,但我很难这是因为它们重叠。此外,然后我将比较 drat_4 和 wtp_3 正例的变量,并将 p 值添加到 table。对不起,如果这令人困惑。我会尽力澄清!

非常感谢您对此的帮助!

我认为代码示例可以解决您的问题。您需要通过对两列进行适当比较来补充代码,同时考虑到这两个组并不相互排斥。

library(gtsummary)
library(tidyverse)
packageVersion("gtsummary")
#> [1] '1.4.0.9004'

mtcars_tab <- 
  mtcars %>%
  mutate(
    drat_4 = ifelse(drat >= 4, 1, 0),
    wtp_3 = ifelse(wt >= 3, 1, 0)
  ) %>%
  select(drat_4, wtp_3, cyl, mpg)

with(mtcars_tab, table(drat_4, wtp_3))
#>       wtp_3
#> drat_4  0  1
#>      0  6 19
#>      1  6  1


# table among drat_4 test positive
tbl1 <-
  mtcars_tab %>%
  filter(drat_4 == 1) %>%
  tbl_summary(
    missing = "no",
    type = mpg ~ "continuous",
    include = -c(drat_4, wtp_3)
  ) 

# table among wtp_3 test positive
tbl2 <-
  mtcars_tab %>%
  filter(wtp_3 == 1) %>%
  tbl_summary(
    missing = "no",
    type = mpg ~ "continuous",
    include = -c(drat_4, wtp_3)
  ) 

# create a table with the variable and the p.value
tbl_with_pvalue <-
  tibble(
    variable = c("cyl", "mpg"),
    row_type = "label",
    # you'll need to write a proper function here to get the p-values from an approrate test
    p.value = c(0.033, 0.044)
  )


tbl_final <-
  # merge the two tables
  tbl_merge(list(tbl1, tbl2)) %>%
  # add a pvalue comparing the two columns
  modify_table_body(
    ~.x %>%
      dplyr::left_join(
        tbl_with_pvalue,
         by = c("variable", "row_type")
      )
  ) %>%
  # add header for new pvalue column
  modify_header(p.value ~ "**p-value**") %>%
  # add a formatting function for p-value
  modify_fmt_fun(p.value ~ style_pvalue)

reprex package (v2.0.0)

创建于 2021-05-06