如何使用 {gtsummary} tbl_summary 包含比例的置信区间?
How to include confidence intervals for proportion using {gtsummary} tbl_summary?
刚开始在 Whosebug 上发帖(但不是阅读),所以请耐心等待我的技能。
我正在使用 {gtsummary}
包,特别是 tbl_summary
函数。
我想包括每个 by
和所有包含的分类和连续 variables
.
的比例的 95% 置信区间
搜索之前的帖子,我没有找到解决确切问题的方法。
我的基本输出是使用以下内容创建的:
tbl <- df %>%
select(group, var_cont, var_cat_1, var_cat_2, var_cat_3, var_cat_4) %>%
tbl_summary(
by = group,
statistic =
list(
all_continuous() ~ "{mean} ({sd})",
all_dichotomous() ~ "{n}/{N} ({p}%)"
),
missing = "no",
digits = all_continuous() ~ 1
)
根据我的数据生成以下内容:
tbl_summary output
我的大部分分类变量都是逻辑类型(即 TRUE、FALSE、NA)
我现在想为每个包含 95% 置信区间的 group
级列添加一列,形式为 "{ci_lower}%, {ci_upper}%"
在我的许多尝试中,并从其他帖子中获得灵感,我创建了一个使用 {freqtables}
包的 freq_table()
函数的自定义函数。我制作了函数,因此它适合 {gtsummary}
tbl_summary
.
的 add_stat
函数
ci_function <- function(data, variable, by, ...) {
variable <- enquo(variable)
by <- enquo(by)
data %>%
freq_table(!!by, !!variable) %>%
filter %>%
filter(col_cat == TRUE) %>%
select(row_cat, col_var, n, n_row, percent_row, lcl_row, ucl_row) %>%
mutate(
lcl_row = format(lcl_row, digits = 2),
ucl_row = format(ucl_row, digits = 2),
stat = str_glue("{lcl_row}%, {ucl_row}%")
) %>%
select(stat) %>%
t() %>%
as_tibble() %>%
set_names(paste0("add_stat_", seq_len(ncol(.))))
}
单独使用 ci_function
选择上述变量会得到以下结果:
# A tibble: 1 x 3
add_stat_1 add_stat_2 add_stat_3
<chr> <chr> <chr>
1 0.19%, 9.3% 2.53%, 16.9% 0.34%, 16.3%
当我尝试将 ci_function
应用于 add_stat
时,通过:
tbl <- stack_overflow %>%
select(group, var_cont, var_cat_1, var_cat_2, var_cat_3, var_cat_4) %>%
tbl_summary(
by = group,
statistic =
list(
all_continuous() ~ "{mean} ({sd})",
all_dichotomous() ~ "{n}/{N} ({p}%)"
),
missing = "no",
digits = all_continuous() ~ 1
) %>%
add_stat(everything() ~ "ci_function") %>%
modify_table_body(
dplyr::relocate, add_stat_1, .after = stat_1
) %>%
modify_header(starts_with("add_stat_") ~ "**95% CI**")
.. 我收到错误消息(对于连续变量而言是预期的):
There was an error for variable 'var_cont':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_1':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_2':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_3':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_4':
Error: `nm` must be `NULL` or a character vector the same length as `x`
.. 输出不足 tbl_summary output
我是 {gtsummary}
包及其定制可能性的忠实粉丝。
任何人都可以帮助我如何更正我的自定义函数 ci_function
以便它适用于分类变量和连续变量,并帮助我如何在 add_stat
函数中实现此函数 {gtsummary}
?
干杯!
斯蒂芬
更新 2022-02-13 解决方案现在使用 add_ci()
函数显着减少代码量。
使用 add_ci()
函数添加置信区间列。
library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.5.2'
tbl <-
trial %>%
select(trt, age, response, grade) %>%
tbl_summary(
by = trt,
missing = "no",
statistic = list(all_categorical() ~ "{n}/{N} ({p}%)",
all_continuous() ~ "{mean} ({sd})")
) %>%
add_ci()
由 reprex package (v2.0.1)
创建于 2022-02-13
刚开始在 Whosebug 上发帖(但不是阅读),所以请耐心等待我的技能。
我正在使用 {gtsummary}
包,特别是 tbl_summary
函数。
我想包括每个 by
和所有包含的分类和连续 variables
.
搜索之前的帖子,我没有找到解决确切问题的方法。
我的基本输出是使用以下内容创建的:
tbl <- df %>%
select(group, var_cont, var_cat_1, var_cat_2, var_cat_3, var_cat_4) %>%
tbl_summary(
by = group,
statistic =
list(
all_continuous() ~ "{mean} ({sd})",
all_dichotomous() ~ "{n}/{N} ({p}%)"
),
missing = "no",
digits = all_continuous() ~ 1
)
根据我的数据生成以下内容: tbl_summary output
我的大部分分类变量都是逻辑类型(即 TRUE、FALSE、NA)
我现在想为每个包含 95% 置信区间的 group
级列添加一列,形式为 "{ci_lower}%, {ci_upper}%"
在我的许多尝试中,并从其他帖子中获得灵感,我创建了一个使用 {freqtables}
包的 freq_table()
函数的自定义函数。我制作了函数,因此它适合 {gtsummary}
tbl_summary
.
add_stat
函数
ci_function <- function(data, variable, by, ...) {
variable <- enquo(variable)
by <- enquo(by)
data %>%
freq_table(!!by, !!variable) %>%
filter %>%
filter(col_cat == TRUE) %>%
select(row_cat, col_var, n, n_row, percent_row, lcl_row, ucl_row) %>%
mutate(
lcl_row = format(lcl_row, digits = 2),
ucl_row = format(ucl_row, digits = 2),
stat = str_glue("{lcl_row}%, {ucl_row}%")
) %>%
select(stat) %>%
t() %>%
as_tibble() %>%
set_names(paste0("add_stat_", seq_len(ncol(.))))
}
单独使用 ci_function
选择上述变量会得到以下结果:
# A tibble: 1 x 3
add_stat_1 add_stat_2 add_stat_3
<chr> <chr> <chr>
1 0.19%, 9.3% 2.53%, 16.9% 0.34%, 16.3%
当我尝试将 ci_function
应用于 add_stat
时,通过:
tbl <- stack_overflow %>%
select(group, var_cont, var_cat_1, var_cat_2, var_cat_3, var_cat_4) %>%
tbl_summary(
by = group,
statistic =
list(
all_continuous() ~ "{mean} ({sd})",
all_dichotomous() ~ "{n}/{N} ({p}%)"
),
missing = "no",
digits = all_continuous() ~ 1
) %>%
add_stat(everything() ~ "ci_function") %>%
modify_table_body(
dplyr::relocate, add_stat_1, .after = stat_1
) %>%
modify_header(starts_with("add_stat_") ~ "**95% CI**")
.. 我收到错误消息(对于连续变量而言是预期的):
There was an error for variable 'var_cont':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_1':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_2':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_3':
Error: `nm` must be `NULL` or a character vector the same length as `x`
There was an error for variable 'var_cat_4':
Error: `nm` must be `NULL` or a character vector the same length as `x`
.. 输出不足 tbl_summary output
我是 {gtsummary}
包及其定制可能性的忠实粉丝。
任何人都可以帮助我如何更正我的自定义函数 ci_function
以便它适用于分类变量和连续变量,并帮助我如何在 add_stat
函数中实现此函数 {gtsummary}
?
干杯!
斯蒂芬
更新 2022-02-13 解决方案现在使用 add_ci()
函数显着减少代码量。
使用 add_ci()
函数添加置信区间列。
library(gtsummary)
packageVersion("gtsummary")
#> [1] '1.5.2'
tbl <-
trial %>%
select(trt, age, response, grade) %>%
tbl_summary(
by = trt,
missing = "no",
statistic = list(all_categorical() ~ "{n}/{N} ({p}%)",
all_continuous() ~ "{mean} ({sd})")
) %>%
add_ci()