我正在分析三个同时运行的实验,就像这样:

df <- tibble(
  treatment_1 = 1 * rbinom(1000, 1, 0.5),
  treatment_2 = 2 * rbinom(1000, 1, 0.5),
  treatment_3 = 3 * rbinom(1000, 1, 0.5),
  covariate = rnorm(1000),
  y = covariate + treatment_1 + treatment_2 + treatment_3 + rnorm(1000),
  cluster = rep(1:10, each = 100),
)

我想 for each 实验估计的规格是y ~ covariate + treatment_i + i(treatment_i, covariate, ref = 0) | cluster,当然我可以通过运行feols()三次来实现这一点:

fixest::feols(fml = y ~ covariate + treatment_1 + i(treatment_1, covariate, ref = 0) | cluster, data = df)
fixest::feols(fml = y ~ covariate + treatment_2 + i(treatment_2, covariate, ref = 0) | cluster, data = df)
fixest::feols(fml = y ~ covariate + treatment_3 + i(treatment_3, covariate, ref = 0) | cluster, data = df)

这似乎有点低效,因为这需要我计算cluster个固定效应三次.有没有一种方法可以使用fixest的multiple estimations functionality来估计这三种规格?

推荐答案

是的,如"多个RHS"下的文档所解释的:

sw:这个函数被它的每个参数顺序替换.例如,y ~ x1 + sw(x2, x3)导致两个估计值:y ~ x1 + x2y ~ x1 + x3.

在你的情况下,这变成:

fixest::feols(y ~ covariate +
                  sw(treatment_1 + i(treatment_1, covariate, ref = 0),
                     treatment_2 + i(treatment_2, covariate, ref = 0),
                     treatment_3 + i(treatment_3, covariate, ref = 0)) | cluster, data=df)

作为一个附言,我一直在想您是否可以进一步简化这一点,例如通过使用一个包装器来指定治疗索引自动添加必要的协变量/交互.&答案似乎是"不",至少不容易.

fixest个逐步函数在一个(非常懒惰地计算)match.call上工作,只能通过它们已经定义的名称来识别,拟合 routine /健全性判断提取提供的参数,而不仅仅是返回的(字符)公式,在其他地方导致不匹配,即使你要重新定义它们.总之,公式几乎必须逐字提供给sw.

R相关问答推荐

删除facet_wrap标签之间的水平线

行式dppr中的变量列名

编辑文件后编辑RhandsonTable

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

如何在分组条形图中移动相关列?

如何通过ggplot2添加短轴和删除长轴?

R Select()可以测试不存在的子集列

R中边际效应包中Logistic回归的交互作用风险比

展开对数比例绘图的轴(添加填充)

如何从容器函数中提取conf并添加到ggplot2中?

在保留列表元素属性的同时替换列表元素

在另一个包中设置断点&S R函数

使用R将简单的JSON解析为嵌套框架

我是否可以使用多个变异项来构建顺序列(标记多个问题)

创建新列,其中S列的值取决于该行S值是否与其他行冗余

如何根据其他列中的两个条件来计算数据帧中的行之间的差异?

在鼠标悬停时使用Plotly更改geom_point大小

具有由向量定义的可变步长的序列

使用卡环从R中的列中删除单位(&C)

当y为负值时,无法使stat_cor正确定位到底部?