0

我正在尝试将使用熵平衡重新加权 ebal 包生成的权重添加到数据框中,以便之后在平衡样本的回归分析中使用它们。我用于加权的代码是:

# install.packages("ebal")
library(ebal)
out.eb<- ebalance(Treatment=Treatment,X=X,constraint.tolerance = 2)

然后将权重添加到数据框中,我假设处理单元的权重为 1,并且控制单元应该获得使用 ebal 生成的权重,因此:

data$weights <- ifelse(Treatment==1,1,out.eb$w)

我认为我弄错了,但不确定什么是正确的解决方案。将不胜感激您的建议。

4

1 回答 1

0

你想要的是以下内容:

data$weights <- 1
data$weights[Treatment == 1] <- eb$w

这与ifelse()结构的方式有关。每个参数中的元素数量ifelse()应该是长度 1 或在第一个参数处具有相同的长度。因为ebal()只为处理过的单位产生权重,eb$w元素少于Treatment,所以分配失败。使用上面的语法可以避免这个问题。

另一个要查看的选项是WeightIt包,它还实现了熵平衡,并且可能更易于使用。

于 2021-08-24T06:28:46.580 回答