在R中执行加权和分层logistic回归

nuypyhwy  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(108)

我想用加权数据做一个分层逻辑回归。回归似乎工作正常,但我在显示分层结果时遇到了问题。以前,当我对同一数据集进行单变量回归时,我使用了tbl_uvregression(),效果很好。但是,我无法用tbl_regression()实现同样的功能。即使我使用summary(),它也只提供一个结果。
我提供了一些类似于我的数据集的虚构数据,以防任何人以前遇到过这个问题。

library(tidyverse)
library(gtsummary)
library(survey)

gender <- factor(c(1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1, 2))
age <- factor(c(3, 4, 2, 1, 3, 1, 1, 2, 3, 3, 4, 1, 3, 1, 3, 4, 2, 1, 2, 1))
prema.5cl <- factor(c(5, 4, 5, 2, 1, 1, 3, 1, 5, 1, 2, 4, 4, 3, 1, 2, 1, 4, 5, 2))
meduc.4cl <- factor(c(1, 2, 3, 3, 1, 4, 2, 1, 4, 2, 1, 3, 3, 4, 4, 2, 4, 3, 1, 2))
mhealth <- factor(c(1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0))
parttime <- factor(c(1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0))
ref1 <- factor(c(0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0))
ref2 <- factor(c(0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0))
ref3 <- factor(c(0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1))
poids <- c(0.52, 1.43, 0.74, 1.60, 1.71, 0.08, 0.96, 1.62, 1.00, 0.83, 1.74, 0.82, 1.23, 1.04, 0.19, 1.63, 0.45, 0.08, 0.60, 1.73)
gd <- factor(c("gp_2", "gp_1", "gp_2", "gp_1", "gp_2", "gp_1", "gp_1", "gp_1", "gp_2", "gp_2", "gp_1", "gp_1", "gp_2", "gp_1", "gp_1", "gp_2", "gp_2", "gp_1", "gp_2", "gp_2"))
bth_2y <- factor(c(1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0))
db <- data.frame(gender, age, prema.5cl, meduc.4cl, mhealth, parttime, ref1, ref2, ref3, poids, gd, bth_2y)

reg1 <- svyglm(
  bth_2y ~ gender + age + prema.5cl + meduc.4cl + mhealth + ref1 + ref2 + ref3,
  family = quasibinomial,
  design = svydesign(id=~1, data = db, weights = ~poids, strata = ~gd))

summary(reg1)

tbl_regression(reg1)

谢谢你的帮助。

9w11ddsr

9w11ddsr1#

这段代码产生了我所期望的结果:它要求具有五个预测因子的单个逻辑回归模型。你没说你在找什么。
猜猜看,也许你脑子里有“分层”的另一种含义?在svydesign中,分层是样本量通过设计固定的人群子集(分层 * 样本 *)。“分层”还有另一种用法,意思是你想对不同的亚群分别进行分析。如果你是这个意思的话,你想要的是

design<-svydesign(id=~1, data = db, weights = ~poids, strata = ~gd)
reg1 <- svyglm(
  bth_2y ~ gender + age + prema.5cl + meduc.4cl + mhealth + ref1 + ref2 + ref3,
  family = quasibinomial,
  design = subset(design, gd=="gp_1"))
summary(reg1)
tbl_regression(reg1)

reg2 <- svyglm(
  bth_2y ~ gender + age + prema.5cl + meduc.4cl + mhealth + ref1 + ref2 + ref3,
  family = quasibinomial,
  design = subset(design, gd=="gp_2"))
summary(reg2)
tbl_regression(reg2)

这在示例数据中实际上不起作用,因为它太小了;一些协变量组合没有出现。它应该在你的真实的数据中工作。
如果gd确实不是采样层,则需要省略svydesign调用的strata=~gd部分

相关问题