【发布时间】:2020-08-19 02:16:51
【问题描述】:
考虑以下使用 R 的测试数据集:
testdat<-data.frame("id"=c(rep(1,5),rep(2,5),rep(3,5)),
"period"=rep(seq(1:5),3),
"treat"=c(c(0,1,1,1,0),c(0,0,1,1,1),c(0,0,1,1,1)),
"state"=c(rep(0,5),c(0,1,1,1,1),c(0,0,0,1,1)),
"int"=c(rep(0,13),1,1))
testdat
id period treat state int
1 1 1 0 0 0
2 1 2 1 0 0
3 1 3 1 0 0
4 1 4 1 0 0
5 1 5 0 0 0
6 2 1 0 0 0
7 2 2 0 1 0
8 2 3 1 1 0
9 2 4 1 1 0
10 2 5 1 1 0
11 3 1 0 0 0
12 3 2 0 0 0
13 3 3 1 0 0
14 3 4 1 1 1
15 3 5 1 1 1
前 4 个变量是我所拥有的,int 是我想要创建的变量。它类似于treat 和state 之间的交互,但是这将在第 8-10 行中包含 1,这是不希望的。本质上,我只想要在state 在treat 期间发生变化时进行交互,但不是其他情况。关于如何创建这个(尤其是对于具有一百万个观察值的数据集的大规模)有什么想法吗?
编辑:为了澄清我为什么想要这个措施。我想运行类似以下回归的东西:
lm(outcome~treat+state+I(treat*state))
但只有当treat 跨越state 的变化时,我才真正对交互感兴趣。如果我要运行上述回归,I(treat*state) 会汇集我感兴趣的交互的效果,并且当treat 完全为 1 时,state 为 1。理论上,我认为这些会有两种不同的效果,所以我需要分解它们。我希望这是有道理的,我很乐意提供更多详细信息。
【问题讨论】:
-
为什么不在第 7 行添加
1? -
获取列
int的逻辑是什么? -
第 9 行和第 10 行与第 14-15 行相同,只是 id 是 2 而不是 3,因此我们无法推断出您想要什么行为。
-
查看我的编辑以了解更多上下文。让我知道这是否有意义。
-
@GavinKelly 不同之处在于
treat在第 14-15 行的状态等于 0 时“开始”。
标签: r variables panel-data