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

使用Survey包为堆叠多重插补数据加权校正标准误问题咨询

多重插补堆叠数据建模标准误校准问题

研究背景

我正在开展插补数据的模型变量选择相关研究,其中一种实现方案是将多重插补结果转换为长格式堆叠数据:M个插补数据集的n条原始观测会生成规模为n×M的长数据集,此时需要通过加权回归按插补次数比例降低单条观测的贡献,否则直接对堆叠数据集建模会得到偏小的标准误。
我尝试使用svyglm的weights参数处理堆叠数据,期望输出对应n条原始观测而非n×M条观测的标准误,具体实现过程如下:

复现代码

library(mice)

### create data
set.seed(42)
n <- 50
id <- 1:n
var1 <- rbinom(n,1,0.4)
var2 <- runif(n,30,80)
var3 <- rnorm(n, mean = 12, sd = 5)
var4 <- rnorm(n, mean = 100, sd = 20)
prob <- (((var1*var2)+var3)-min((var1*var2)+var3)) / (max((var1*var2)+var3)-min((var1*var2)+var3))
outcome <- rbinom(n, 1, prob = prob)
data <- data.frame(id, var1, var2, var3, var4, outcome)

### Add missingness
data_miss <- ampute(data)
patt <- data_miss$patterns
patt <- patt[2:5,]
data_miss <- ampute(data, patterns = patt)
data_miss <- data_miss$amp

## create 5 imputed datasets
nimp <- 5
imp <- mice(data_miss, m = nimp)

## Stack data
data_long <- complete(imp, action = "long")

## Generate model in stacked data (SEs will be too small)
modlong <- glm(outcome ~ var1 + var2 + var3 + var4, family = "binomial", data = data_long)
summary(modlong)

直接建模输出(标准误偏小)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -2.906417   0.965090  -3.012   0.0026 ** 
var1         2.221053   0.311167   7.138 9.48e-13 ***
var2        -0.002543   0.010468  -0.243   0.8081    
var3         0.076955   0.032265   2.385   0.0171 *  
var4         0.006595   0.008031   0.821   0.4115    

加权回归尝试代码

data_long$weight <- 1/nimp

library(survey)
des <- svydesign(ids = ~1, data = data_long, weights = ~weight)
mod_svy <- svyglm(formula = outcome ~ var1 + var2 + var3 + var4, family = quasibinomial(), design = des)

summary(mod_svy)

加权回归输出(标准误仍偏小)

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.906417   1.036691  -2.804  0.00546 ** 
var1         2.221053   0.310906   7.144 1.03e-11 ***
var2        -0.002543   0.010547  -0.241  0.80967    
var3         0.076955   0.030955   2.486  0.01358 *  
var4         0.006595   0.008581   0.769  0.44288    

添加rescale = F参数禁止权重重缩放至样本量总和后,结果无变化:

mod_svy <- svyglm(formula = outcome ~ var1 + var2 + var3 + var4, family = quasibinomial(), design = des, rescale = F)
summary(mod_svy)
Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.906417   1.036688  -2.804  0.00546 ** 
var1         2.221053   0.310905   7.144 1.03e-11 ***
var2        -0.002543   0.010547  -0.241  0.80967    
var3         0.076955   0.030955   2.486  0.01358 *  
var4         0.006595   0.008581   0.769  0.44288 

预期参考结果

加权后得到的标准误应与单个插补数据集建模结果接近,单个插补数据集建模输出如下:

## Assess SEs in single imputation
mod_singleimp <-  glm(outcome ~ var1 + var2 + var3 + var4, family = "binomial", data = complete(imp,1))
summary(mod_singleimp)
Coefficients:
             Estimate Std. Error z value Pr(>|z|)   
(Intercept) -2.679589   2.116806  -1.266  0.20556   
var1         2.476193   0.761195   3.253  0.00114 **
var2         0.014823   0.025350   0.585  0.55874   
var3         0.048940   0.072752   0.673  0.50114   
var4        -0.004551   0.017986  -0.253  0.80026  

方案需求

  • 希望获得该标准误偏小问题的解决思路
  • 也欢迎提供其他可实现相同目标的轻量化方案

现有可选方案中,psfmi包支持多重插补数据集的逐步选择与模型合并,但在大数据集场景下计算负载高、运行速度慢,尤其是需要执行自助法内部验证时耗时更长,因此不满足使用需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:45:03