多重插补和倾向得分

机器算法验证 r 多重插补 倾向评分
2022-03-31 13:21:17

我有一个包含 1300 个观察值和 30 个变量的数据集。其中一个变量有 10% 的缺失数据,另一个有 5%,第三个有 3%。在多重插补后看到倾向得分匹配,我根据来自 MICE 的插补数据创建了一个平均倾向得分。也基于Mitra等人的工作。

现在我需要

  1. 执行匹配过程 - 最好我想使用MatchIt,但它不允许预先生成倾向得分,这是因为前面步骤中的平均而需要的。我可以在匹配中做到这一点- 但是,我对它不是很熟悉。有谁知道是否可以在 MatchIt 中使用预先生成的倾向得分?
  2. 我需要提供一些证据证明匹配组在生成的倾向得分中使用的协变量方面是相似的。但是,由于生成的倾向得分是基于多个估算数据集,因此如何做到这一点是不确定的?仅对估算值进行平均并生成“平均”估算数据集并将其用于余额检查是否可以?
2个回答

我的理解是,您应该为每个数据集生成单独的倾向评分模型,然后匹配,然后估计结果,然后将估计值合并为一个。

1)Match()在 Matching 中接受用户自己的倾向得分(将其作为 X 参数包含在对 . 的调用中Match()matchit()在 MatchIt 中也是如此。我还建议您尝试倾向得分加权;包 twang 允许用户输入自己的倾向得分/权重然后评估平衡。twang 小插曲解释了如何做到这一点并估计治疗效果。

2) 通常对于平衡评估报告,您分别评估每个数据集的平衡,然后报告估算数据集中每个协变量的最大不平衡。不要平均您的估算数据集。如果在估算的数据集中,每个协变量的最大不平衡在可接受的范围内(例如,ASMD <.1),这应该足以证明您已经达到平衡并且可以继续前进。

正如我之前所说,在缺失数据插补后使用逆概率治疗加权是合理的,而不是进行倾向匹配。

合适的Stata示例如下:

clear all
webuse mheart5 
*dataset

replace smokes = . in 20/70
*creates missing values for smokes variable in observations 20 to 70

mi set mlong 
mi register imputed age bmi smokes
set seed 29390
mi impute mvn age bmi smokes = attack hsgrad female, add(10)
*missing data imputation creating 10 imputed datasets

replace smokes=round(smokes,1)
replace smokes = 1 if smokes >=1 
replace smokes = 0 if smokes <=0 
*rounding to transform smokes variables into a binary one

set seed 54321
generate randomvar = runiform()
gsort randomvar
*random sorting of the data

psmatch2 smokes age bmi female hsgrad, noreplace logit 
gen iptw = 1/(1-_pscore) if smokes == 0
replace iptw = 1/(_pscore) if smokes == 1
*generation of inverse probability of treatment weighting

mi estimate: glm attack smokes [pweight = iptw], family(binomial) link(identity) vce(robust)
*inverse probability of treatment weighting analysis for dichotomous endpoint after multiple imputation

*---

clear all
webuse stan3
*dataset

replace age = . in 20/70
replace transplant = . in 40/90
*creates missing values for age variable in observations 20 to 70 and transplant variable in observations 40 to 90

mi set mlong 
mi register imputed age transplant
set seed 54321
mi impute mvn age transplant = year died stime surgery wait posttran, add(10)
*missing data imputation creating 10 imputed datasets

replace transplant=round(transplant,1)
replace transplant = 1 if transplant >=1 
replace transplant = 0 if transplant <=0 
*rounding to transform transplant variable into a binary one

set seed 54321
generate randomvar = runiform()
gsort randomvar
*random sorting of the data

psmatch2 surgery year age transplant wait posttran, noreplace logit 
gen iptw = 1/(1-_pscore) if surgery == 0
replace iptw = 1/(_pscore) if surgery == 1
*generation of inverse probability of treatment weighting

mi stset stime [pweight = iptw], failure(died) scale(1)
mi estimate: stcox surgery
*inverse probability of treatment weighting analysis for censored endpoint after multiple imputation 

mi estimate: glm stime surgery [pweight = iptw], family(gaussian) link(identity) vce(robust)
*inverse probability of treatment weighting analysis for continuous endpoint after multiple imputation