【问题标题】:Calculating p-values from a tbl_merge object?从 tbl_merge 对象计算 p 值?
【发布时间】:2021-05-05 16:14:12
【问题描述】:

我一直在使用 R 函数 gtsummary,但现在遇到了一个问题,即变量存在于彼此的子集中。我有两个筛查测试可以相互独立,这造成了将 by = 与 tbl_summary 一起使用的问题。这导致我创建了两个单独的表并将它们与 tbl_merge 函数结合起来。

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

根据请求,我从 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

我想要的是将表格拆分为 drat_4 为正的一列和 wtp_3 为正的另一列,但由于它们重叠,我很难做到这一点。此外,然后我将比较 drat_4 和 wtp_3 的阳性情况的变量,并将 p 值添加到表中。对不起,如果这令人困惑。我会尽力澄清!

非常感谢您的帮助!

【问题讨论】:

  • chisq.test() 可能是您正在寻找的。您能否提供数据和代码以使我们能够重新创建您的问题?使用dput(your_data),将输出复制并粘贴到您的问题中,以便轻松与他人共享 R-Objects。
  • 如果您发布可重现的示例,包括我们可以在我们的机器上运行的数据和代码,我们可以提供帮助。还请包括计算差异测试的代码。
  • 感谢@DanielD.Sjoberg 和 Till 的回复!我添加了代码并阐明了示例。如果我能进一步澄清这个问题,请告诉我。

标签: r gtsummary


【解决方案1】:

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

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 创建

【讨论】:

  • 感谢您提供此解决方案!我自己也做过类似的事情。有什么方法可以从 gtsummary 对象中提取总和和百分比以输入到计算 p 值的函数中?
  • 是的!这是获取变量 cyl tbl_final %&gt;% purrr::pluck("tbls", 1, "meta_data", "df_stats", 1) 的第一个表中的计数的示例
猜你喜欢
  • 2018-10-12
  • 2017-11-30
  • 1970-01-01
  • 2018-09-18
  • 1970-01-01
  • 2014-04-13
  • 2019-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多