2012-06-07 31 views
0

我正在尝试使用plm来估计具有个人特定时间趋势的固定效果面板,并针对与other people相同的问题运行。我非常乐意使用链接CrossValidated问题中描述的解决方法,但无法弄清楚如何生成必要的数据框列。手动生成交互术语

即,我的形式

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

的数据帧,并希望添加到该数据帧的列的每个名为date_idXid,具有相同的值作为date的所有观测值其中id==X,否则为零。

我的问题的任何更优雅的解决方案当然也将不胜感激。

+0

你的意思与'date'相同吗? –

+0

恩,对,对不起! – RoyalTS

回答

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的问题妥善解决,而是应该与普通的回归工作的方法。您应该编辑您的问题以包含适当的测试用例。

+0

这个问题似乎并没有让我自己清楚:我试着简单地将'date * id'放入公式中,但这在'plm'中不起作用,因为链接的CrossValidated问题中提到了一些原因。建议的解决方法是手动创建这些个人特定的时间趋势,然后将其添加到公式中。而且由于我有300个人,我需要300个包含时间趋势的变量。因此'date_idX'应该代表'date_id1','date_id2','date_id3'等等的全部。 – RoyalTS

+0

其实我看不出一个术语,我理解为日期*编号。我看到一个类似于y〜date + date:id的模型。我的建议是创建一个缩减的数据框,例如4个人和5个时间段,并与更易于管理的“测试平台”一起工作。然后,您可以处理多达300个。有关于econ和混合效果主题的R-SIG邮件列表。 –