倾向得分加权分析疑问:分组建模是否正确划分氯氮平组与对照组?
问题分析与解决
为什么两个模型结果完全一致?
你的代码存在关键错误:在do()块的glm函数中,指定的data = df_all是完整的全量数据集,并没有使用group_by(clozapine.or.not)拆分出的分组子数据。这导致两个分组模型实际上都是用全部数据跑的,自然结果完全一致——分组操作根本没生效,数据也没被分配到氯氮平组和对照组。
修正后的分组建模代码
把data参数改成.(代表do()当前处理的分组子数据框)即可:
models <- df_all %>% group_by(clozapine.or.not) %>% do(model = glm(death_yn ~ Education + Institution.Cluster + SuicidalAttempt_yn, data = ., # 改用当前分组的子数据 family = binomial(logit))) models$model
修正后,两个模型会分别基于氯氮平组和对照组的子数据运行,结果会出现差异。
关于分开/合并分析的建议
你要做的是倾向得分加权估计ATE,不需要分组建模,正确流程应该是:
- 估计倾向得分:用logistic回归,把
clozapine.or.not作为因变量,协变量(Institution.Cluster、Education、SuicidalAttempt_yn)作为自变量,得到每个样本被分配到氯氮平组的概率。 - 计算加权权重:比如逆概率权重(IPW),处理组权重设为
1/倾向得分,对照组权重设为1/(1-倾向得分)。 - 用加权数据集估计ATE:可以用加权的logistic回归(
death_yn ~ clozapine.or.not,加上权重参数),或者直接计算两组加权后的死亡率差异。
如果只是想简单比较两组调整协变量后的死亡率差异,也可以直接在一个模型中加入分组变量和所有协变量:
glm(death_yn ~ clozapine.or.not + Education + Institution.Cluster + SuicidalAttempt_yn, data = df_all, family = binomial(logit))
这个模型中clozapine.or.not的系数,就是调整协变量后的组间对数优势比差异。
内容的提问来源于stack exchange,提问作者oohsehun
相关产品推荐
相关产品推荐

