【发布时间】:2022-01-04 19:31:55
【问题描述】:
gtsummary 目前是否有一种方法可以为事后测试的每个成对比较的 p 值创建列?例如,假设有 4 个组,是否有一个函数将 p 值作为单独的列包含
- 整体 anova 或卡方取决于是连续的还是分类的
- a vs b
- a vs c
- a vs d
- b vs c
- b vs d
- c vs d
【问题讨论】:
gtsummary 目前是否有一种方法可以为事后测试的每个成对比较的 p 值创建列?例如,假设有 4 个组,是否有一个函数将 p 值作为单独的列包含
【问题讨论】:
您可以使用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 is.numeric(var): do pairwise t tests, if is.factor(var): do chi square。具体来说,我可以在这里的var 部分输入什么?一旦我有了它应该很容易
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))