You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tableone包如何从svydesign对象获取比值比及置信区间

加权后变量置信区间及比值比计算方案

一、获取各变量的置信区间

你已经通过svydesign生成加权设计对象后,可以直接利用tableone包的内置参数输出置信区间,也可以通过survey包的函数单独提取数值:

  • 直接通过已生成的svyCreateTableOne对象输出带CI的表格:
# 输出含均值/百分比、95%置信区间、p值的加权表
table_with_ci <- print(tabel, ci = TRUE, digits = 2)
  • 单独提取分组置信区间可使用svyby函数:
    • 连续变量分组均值CI:svyby(~目标连续变量, ~分组变量var, design, svymean, ci = TRUE)
    • 分类变量分组占比CI:svyby(~I(目标分类变量 == "目标水平"), ~分组变量var, design, svyciprop, method = "logit")

二、获取比值比、对应p值及置信区间

由于你的分组变量var为二分类,可通过加权logistic回归批量计算各变量的比值比相关统计量:

单变量比值比计算示例

# 拟合加权logistic回归,注意结局变量需为二分类变量
fit <- svyglm(二分类结局变量 ~ var, design = design, family = binomial(link = "logit"))
# 提取OR、95%CI、p值
or_result <- exp(cbind(
  OR = coef(fit),
  confint(fit),
  p.value = summary(fit)$coefficients[,4]
))

批量生成所有变量的OR结果

如果你需要一次性计算所有待分析变量对应的OR,可以用循环实现:

# 替换为你的待分析变量列表
list_var <- c("var1", "var2", "var3")
or_all <- data.frame()
for (v in list_var) {
  # 二分类/分类变量计算OR
  if (length(unique(df[[v]])) == 2 | is.factor(df[[v]])) {
    fit <- svyglm(as.formula(paste0(v, "~ var")), 
                  design = design, family = binomial())
    tmp <- exp(cbind(
      variable = v,
      OR = coef(fit)[2],
      lower_ci = confint(fit)[2,1],
      upper_ci = confint(fit)[2,2],
      p_value = summary(fit)$coefficients[2,4]
    ))
    or_all <- rbind(or_all, tmp)
  } else {
    # 连续变量输出组间差值及置信区间即可
    fit <- svyglm(as.formula(paste0(v, "~ var")), 
                  design = design, family = gaussian())
    tmp <- cbind(
      variable = v,
      mean_diff = coef(fit)[2],
      lower_ci = confint(fit)[2,1],
      upper_ci = confint(fit)[2,2],
      p_value = summary(fit)$coefficients[2,4]
    )
    or_all <- rbind(or_all, tmp)
  }
}

如果需要生成未调整和调整后的结果对比,仅需用原始未加权数据重复上述逻辑,再合并两个结果表即可得到对应的对比格式。

内容的提问来源于stack exchange,提问作者Trunkten

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:30:00