在felm中指定多个固定效果

时间:2015-09-06 12:39:55

标签: r

我正在尝试估算以下模型:

y_ {it} = \ alpha + \ beta x_ {it} + \ eta_i + \ gamma_t + group_i \ times \ eta_t + \ epsilon_ {it}

#Clear everything and load the needed libraries:
rm(list=ls())
library(data.table)
#Define nr of individuals:
nr_ind<-1000

#Define time periods
nr_time<-5

#Define groups:
nr_groups<-2

#Create individual indicators:
pers_id<-rep(1:nr_ind,each = nr_time)
time_id<-rep(1:nr_time,nr_ind)
data<-data.table(pers_id=pers_id,time_id=time_id)

#Create time varying regressor:
data<-data[,x:=rnorm(1,0.01),by=c("pers_id","time_id")]

#Create time effect:
data<-data[,mean_x_time:=3*mean(x),by=c("time_id")]

#Create fixed effect:
data<-data[,mean_x_person:=1.5*mean(x),by=c("pers_id")]

#Create group varying time effect:
data_group<-data.table(pers_id=1:nr_ind,group=sample(c("M","F"),nr_ind,replace=TRUE))
data<-merge(data,data_group,by="pers_id",all.x=TRUE)
data<-data[,group_effect:=ifelse(group=="M",mean_x_time+mean_x_time^2+0.03,0)]

#Define the model:
data$y<-0.1+0.3*data$x+data$mean_x_person+data$mean_x_time+data$group_effect+rnorm(dim(data)[1])
data<-data[,time_id:=as.factor(time_id)]
data<-data[,group:=as.factor(group)]

model<-felm(y~x|pers_id+time_id*group,data=data)

然后我输入:

getfe(model)

我得到一个错误,这是一个预期的结果,因为pers_id和group是共线的。据我所知,它创造了什么样的felm: pers_id + TIME_ID + GROUP_ID + TIME_ID:GROUP_ID

目前我可以这样做:

interaction_term<-interaction(data$time_id,data$group)
data$interaction_term<-as.character(interaction_term)
data$dummy_1<-ifelse(as.character(data$interaction_term)=="1.M",1,0)
data$dummy_2<-ifelse(as.character(data$interaction_term)=="2.M",1,0)
data$dummy_3<-ifelse(as.character(data$interaction_term)=="3.M",1,0)
data$dummy_4<-ifelse(as.character(data$interaction_term)=="4.M",1,0)
data$dummy_5<-ifelse(as.character(data$interaction_term)=="5.M",1,0)
model<-felm(y~x+dummy_2+dummy_3+dummy_4+dummy_5|pers_id+time_id,data=data)

但是这有点笨拙,当我有很多时间段时变得不可行。所以我的问题是,是否有可能以某种方式在felm中指定felm(y~x | f1:f2)并且只有交互效果,即f1:f2而不是f1 + f2 + f1:f2

1 个答案:

答案 0 :(得分:2)

felm中公式的固定效果部分不支持构造a*b。该字段不会使用普通解析器进行解析。主要是因为像f*x这样的表达式f是一个因素而x是一个数字会造成破坏。即它会创建像x + f + f:x这样的固定效果,但作为数字的x通常应被视为普通的连续变量,即放在公式的第一部分。这当然可以自动完成,但目前felm不支持。 f*g也没有两个因素。实际发生了什么,我不知道。

解析器非常简单,它包括让:成为两个变量的中缀函数,然后公式的固定效应部分在模型中eval。帧。如果函数:的两个参数都是因子,则它会创建一个交互因子。它以递归方式工作,因此具有三个因素的f:g:h之类的东西也有效(偶然,而非思考)。如果其中一个参数是数字,它会创建一个内部结构,以便将表达式视为因子和连续协变量之间的相互作用。

简而言之,公式的固定效应部分的配方功能非常有限。完全互动&#39; *&#39;是支持。仅限time_id:grouptime_id:group + time_id + group

getfe()中当前存在错误,如果在固定效果字段中将两个因素之间的交互指定为felm,则可能会导致错误的错误消息。 (这是一个愚蠢的错误;像attr(f,'x')这样的表达式部分匹配'x',而我还没有指定exact=TRUE,所以它匹配的东西不应该是{\}} ,深入内部)。这将在下一个版本中修复,该版本将在一周左右到期。

这种混乱是由于固定效应字段中引入了语法f:x以支持因子f和连续协变量x之间的交互。两个因素之间的相互作用是作为事后的想法实现的。