使用tbl_svysummary设置p值小数位数失效的问题求助
问题描述
使用包含分层、权重的数据集,通过R语言srvyr与gtsummary包,调用tbl_svysummary结合svy.t.test进行t检验并报告p值。已在add_p函数中设置pvalue_fun保留4位小数,但输出的p值仍仅保留到十分位,需解决该格式问题。
问题原因
错误地将pvalue_fun参数嵌套在了test的列表参数中,而add_p()函数里pvalue_fun是独立的顶层参数,并非test列表的子元素,导致格式设置未生效,p值使用了默认的显示格式。
解决方法
将pvalue_fun从test列表中移出,作为add_p()的直接参数传入即可。修改后的完整代码如下:
if (!require(srvyr)) install.packages('srvyr'); require(srvyr) if (!require(gtsummary)) install.packages('gtsummary'); require(gtsummary) library(srvyr) library(gtsummary) example <- structure( list( id = c( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ), strata = c( 10, 20, 30, 10, 20, 20, 10, 20, 30, 30, 10, 30, 30, 20, 10, 20, 20, 20, 10, 20, 20, 30, 30, 20, 30 ), weight = c( 10, 8, 17, 15, 9, 10, 25, 8, 8, 13, 17, 24, 12, 15, 3, 12, 16, 17, 24, 12, 3, 2, 8, 14, 4 ), popgroup = c( "A", "B", "A", "A", "A", "A", "B", "B", "B", "A", "A", "B", "A", "B", "A", "A", "B", "A", "A", "B", "A", "B", "B", "B", "B" ), inc_01 = c( 1500, 1200, 130, 500, 750, 2000, 10000, 1500, 1050, 400, 360, 490, 250, 400, 2500, 1300, 800, 540, 690, 520, 600, 700, 700, 600, 400 ), inc_02 = c( 360, 450, 120, 300, 900, 560, 450, 280, 720, 360, 1000, 900, 530, 820, 640, 520, 130, 140, 150, 650, 240, 130, 200, 300, 500 ) ), class = c( "tbl_df", "tbl", "data.frame" ), row.names = c(NA, -25L) ) table_01 <- example |> srvyr::as_survey_design( strata = strata, weights = weight ) |> dplyr::select(popgroup, inc_01, inc_02) |> dplyr::filter(!is.na(popgroup)) |> gtsummary::tbl_svysummary( by = popgroup, type = list( inc_01 ~ "continuous", inc_02 ~ "continuous" ), statistic = list(c(inc_01, inc_02) ~ "{mean} ({mean.std.error})"), missing = "no", digits = list(c(inc_01, inc_02) ~ c(4, 4)), ) |> gtsummary::add_p( test = list(all_continuous() ~ "svy.t.test"), pvalue_fun = function(x) gtsummary::style_pvalue(x, digits = 4) ) |> gtsummary::modify_fmt_fun( update = statistic ~ function(x) gtsummary::style_number(x, digits = 6) ) # 查看结果 table_01
关键修改点:
- 将
pvalue_fun从test的列表中移出,作为add_p()的独立参数 - 保持
test参数仅定义检验方法
内容的提问来源于stack exchange,提问作者Stephen Okiya
相关产品推荐
相关产品推荐

