在 R table 中按调查权重加权的原始计数和百分比?

Raw counts and percentages weighted by survey weight in R table?

我正在使用 R 包 table1 创建一个简单的 table 汇总统计数据,主要用于分解变量(年龄类别、性别、种族等)。 table 中的计数需要是原始计数,但百分比需要通过数据集中的调查权重变量进行加权。这似乎是一个足够简单的任务,应该有一个具有此功能的 table-making 包,但我似乎无法在 table1, flex[=18= 中找到解决方案]、gt、kableExtra 或任何其他软件包。

下面的示例大致显示了到目前为止我能做的事情,但是出现的百分比是未加权的,我找不到使用 sv_weight 变量计算加权百分比的方法。

set.seed(123)
dat <- data.frame(
  year = factor(sample(c("2019", "2020"), 100, replace = TRUE)),
  sv_weight = (sample(1:150, 100, replace = TRUE)),
  sex = factor(sample(c("Male", "Female"), 100, replace = TRUE)),
  race =  factor(sample(c("White", "Hispanic", "Black"), 100, replace = TRUE)))

library(table1)
tab<- table1(~ sex + race | year, data = dat) 

tab

您可以组合使用 surveygtsummary 包。 survey::svydesign 中有一个选项可以添加权重。然后,survey 对象通过管道传输到 tbl_svysummary。但是,根据您的预期输出,您可能需要使用不同的统计信息或调整其他一些设置。

library(gtsummary)
library(dplyr)

results <-
  survey::svydesign(~ 1, data = dat, weights = ~ sv_weight) %>%
  tbl_svysummary(
    by = year,
    include = c(sex, race),
    statistic = list(all_categorical() ~ "{n_unweighted} ({p}%)")
  )

输出