用倾向评分计算对被治疗者(ATET / ATT)的平均治疗效果

时间:2020-05-07 00:12:11

标签: r statistics regression stata propensity-score-matching

我正在尝试使用倾向评分来计算对被治疗者的平均治疗效果。我正在使用这些数据来估计母亲在怀孕期间吸烟是否会影响出生体重。

数据包括具有出生体重(dbrwt)的列,具有吸烟状态的列(tobacco01)和具有多个协变量的列。

我计算出的平均治疗效果(ATE)如下:

model1 <- lm(dbrwt ~ tobacco01, data = dfc, weights = weight)

“体重”对象包括通过对其他几个协变量进行吸烟状态回归而生成的倾向得分。

现在,我已经计算出ATE,我正试图找到一种方法来计算对被治疗者(ATET)的平均治疗效果。理想情况下,我可以通过修改上面的公式来做到这一点。在Stata中,有一个简单的“ atet”命令,因此我想知道R中是否有任何可比的东西。搜索时,我没有发现任何可比的东西,特别是当我指定要包括倾向得分时。

我也愿意手动执行此操作。 ATE是整个总体上的斜率的平均值(又名上述烟草01变量的系数)。 ATET是在怀孕期间吸烟的母亲在人口子集上的平均斜率。本质上是在问:如果不吸烟,母亲对吸烟人群的系数有何期望?

1 个答案:

答案 0 :(得分:1)

您可以通过应用统计知识来避免使用软件包。

倾向得分(ps)很可能还不是加权ATE回归的权重。您应该使用适当的公式来计算权重(例如,参见Morgan和Winship 2015,第7章)。

# ATE
dfc$w.ate <- with(dfc, ifelse(tobacco01 == 1, 1 / ps, 1 / (1 - ps)))

ate <- lm(dbrwt ~ tobacco01, data=dfc, weights=w.ate)
coef(ate)
# (Intercept)   tobacco01 
#   3817.6932   -178.0539 

还有一个加权ATT回归公式。

dfc$w.att <- with(dfc, ifelse(tobacco01 == 1, 1, ps / (1 - ps)))

att <- lm(dbrwt ~ tobacco01, data=dfc, weights=w.att)
coef(att)
# (Intercept)   tobacco01 
#   3843.0671   -334.1448 

玩具数据:

set.seed(42)
n <- 1e3
dfc <- data.frame(dbrwt=rnorm(n, 3500, 500), tobacco01=rbinom(n, 1, .1), ps=runif(n))