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")
- 连续变量分组均值CI:
二、获取比值比、对应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
相关产品推荐
相关产品推荐

