2015-09-06 50 views
0

我試圖估計下面的模型固定效應它}指定多個在felm

#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和組是共線的預期的結果。而據我瞭解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

回答

2

構建a*b在felm公式的固定效應部分中不受支持。該字段不用普通的解析器進行分析。主要是因爲像f*x這樣的表達式,其中f是一個因子,x是一個數字會造成嚴重破壞。即它會產生固定的效果,如x + f + f:x,但作爲數字的x通常應該被視爲一個普通的連續變量,即放入公式的第一部分。這當然可以自動執行,但目前不支持felm。 f*g也沒有兩個因素。到底發生了什麼,我不知道。

解析器非常簡單,它包含讓:成爲兩個變量的中綴函數,並且公式的固定效應部分在模型框架中是eval'ed。如果它的參數都是因子,函數:將創建一個交互因子。它遞歸地工作,所以諸如f:g:h這三個因素也起作用(偶然,而不是思想)。如果其中一個參數是數字,它將創建一個內部結構,以便將表達式視爲因子與連續協變量之間的交互。

總之,公式的固定效應部分中的公式功能非常有限。完全交互'*'是而不是支持。只有像time_id:grouptime_id:group + time_id + group這樣的東西。

getfe()中當前有一個錯誤,如果在固定效果字段中指定了兩個因素之間的交互作用,可能會導致一個模糊的錯誤消息。 (這是一個愚蠢的錯誤;像attr(f,'x')這樣的表達部分匹配'x',我沒有指定exact=TRUE,所以它匹配不應該的東西,深入內部)。這將在下一個版本中解決,該版本將在一週左右到期。

這個混亂是由於在固定效應字段中引入了句法​​以支持因子f和連續協變量x之間的相互作用。兩個因素之間的相互作用是作爲事後考慮實施的。

+0

順便說一下,固定效果部分沒有用R的標準解析器解析的設計原因(model。矩陣)是因爲lfe被設計來處理如此多層次(如數千萬)的因素,因爲記憶原因,擴展到模型矩陣的模型矩陣是不可行的。固定效應因此全部通過lfe處理。 –