【问题标题】:Generating interaction terms manually手动生成交互项
【发布时间】:2012-06-07 16:24:58
【问题描述】:

我正在尝试使用plm 估计具有个人特定时间趋势的固定效果面板,并且遇到了与other people 相同的问题。我非常愿意使用链接的 CrossValidated 问题中描述的解决方法,但无法弄清楚如何生成必要的数据框列。

也就是说,我有一个表单的数据框

data.frame(date=rep(1:5,times=3),id=rep(1:3,each=5))

并希望为每个id 添加一个名为date_idX 的列,对于所有id==X 的观察值与date 具有相同的值,否则为零。

我的问题的任何更优雅的解决方案当然也会受到赞赏。

【问题讨论】:

  • 你的意思是和'date'一样的值吗?

标签: r panel-data


【解决方案1】:
> dfrm <- data.frame(date=rep(1:5,times=3),id=rep(1:3,each=5))
> 
> X <-3;  dfrm$time_idX <- dfrm$date*(dfrm$id==X)
> dfrm
   date id time_idX
1     1  1        0
2     2  1        0
3     3  1        0
4     4  1        0
5     5  1        0
6     1  2        0
7     2  2        0
8     3  2        0
9     4  2        0
10    5  2        0
11    1  3        1
12    2  3        2
13    3  3        3
14    4  3        4
15    5  3        5

我怀疑您真正想要的是在回归公式中执行此操作。为此,需要 I() 函数。这是伪代码:

  regfun( form = yield ~ I(date*(id==X) ), data=dfrm)

我不保证这将是使用 plm 问题的正确解决方案,但它是一种适用于普通回归的方法。您应该编辑您的问题以包含适当的测试用例。

【讨论】:

  • 似乎我在问题中没有让自己足够清楚:我尝试简单地将date*id 放入公式中,但这在plm 中不起作用,原因在链接的 CrossValidated 问题中提到.建议的解决方法是手动创建这些特定于个人的时间趋势,然后将它们添加到公式中。由于我有大约 300 个人,我需要 300 个变量,每个变量都包含一个时间趋势。因此date_idX 应该代表date_id1date_id2date_id3 等等。
  • 实际上,我没有看到我理解为 date*id 的术语。我看到一个类似于y ~ date + date:id的模型。我的建议是创建一个简化的数据框,比如 4 个个人和 5 个时间段,并使用更易于管理的“测试平台”。然后,您最多可以处理 300 个问题。R-SIG 邮件列表包含经济主题和混合效果主题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-20
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多