[R] Fixed Effects Estimations (in Panel Data)

ivo welch ivowel at gmail.com
Tue May 25 00:24:00 CEST 2010

dear readers---I struggled with how to do nice fixed-effects
regressions in large economic samples for a while.  Eventually, I
realized that nlme is not really what I needed (too complex), and all
I really wanted is the plm package.  so, I thought I would share a
quick example.

################ sample code to show fixed-effects models  in R
# create a sample panel data set with firms and years


fm= as.factor( c(rep("A", 5),  rep("B", 5),  rep("C", 5),  rep("D", 5) ))
yr= as.factor( rep( c(1985,1986,1987,1988,1989), 4))
d= data.frame( fm, yr, y=rnorm(length(yr)), x=rnorm(length(yr)))

# first, the non-specific way.  slow.  lots of memory.  solid.  no
panel-data expertise needed

print(summary(lm( y ~ x + as.factor(fm) -1, data=d)))
print(summary(lm( y ~ x + as.factor(yr) -1, data=d)))
print(summary(lm( y ~ x + as.factor(yr) + as.factor(fm) -1, data=d)))

# second, the specific plm way.  fast. additional functionality

library(plm);  ## also, there is an an excellent  vignette("plm",
package = "plm")

pd= pdata.frame( d, index=c("fm", "yr") )  # perhaps try the
"drop.index=TRUE" argument and look at your output

print(summary(plm( y ~ x, data=pd, model="within", effect="individual"
)))  ### effect="individual" is the default --- this is firm-fixed
print(summary(plm( y ~ x, data=pd, model="within", effect="time" )))
### this is year-fixed effects
print(summary(plm( y ~ x, data=pd, model="within", effect="twoways"
)))  ### this is both

(I have not yet verified that the plm regressions avoid computations
of the factors [i.e., that they do not build an X'X matrix that
includes the number of fixed effects, but work through averaging], but
I presume that they do.  this is of course useful for very large panel
data sets with many thousands of fixed effects.)

and, thanks, Yves and Giovanni for writing plm().

Ivo Welch (ivo.welch at brown.edu, ivo.welch at gmail.com)

More information about the R-help mailing list