The package uses the Method of Alternating Projections to estimate linear
models with multiple group fixed effects. A generalization of the within
estimator. It supports IV-estimation with multiple endogenous variables via
2SLS, with conditional F statistics for detection of weak instruments. It is
thread-parallelized and intended for large problems. A method for correcting
limited mobility bias is also included.
Details
This package is intended for linear models with multiple group fixed
effects, i.e. with 2 or more factors with a large number of levels. It
performs similar functions as lm, but it uses a special
method for projecting out multiple group fixed effects from the normal
equations, hence it is faster. It is a generalization of the within
estimator. This may be required if the groups have high cardinality (many
levels), resulting in tens or hundreds of thousands of dummy variables. It
is also useful if one only wants to control for the group effects, without
actually estimating them. The package may optionally compute standard
errors for the group effects by bootstrapping, but this is a very time- and
memory-consuming process compared to finding the point estimates. If you
only have a single huge factor, the package plm is probably better
suited. If your factors don't have thousands of levels,
lm or other packages are probably better suited.
lfe is designed to produce the same results as lm
will do if run with the full set of dummies.
Projecting out interactions between continuous covariates and factors is
supported. I.e. individual slopes, not only individual intercepts. Multiple
left hand sides are supported.
The estimation is done in two steps. First the other coefficients are
estimated with the function felm by centering on all the group
means, followed by an OLS (similar to lm). Then the group effects are
extracted (if needed) with the function getfe. This method is
described by Gaure (2013), but also appears in Guimaraes and
Portugal (2010), disguised as the Gauss-Seidel algorithm.
There's also a function demeanlist which just does the
centering on an arbitrary matrix or data frame, and there's a function
compfactor which computes the connected components which are
used for interpreting the group effects when there are only two factors (see
the Abowd et al references), they are also returned by getfe.
For those who study the correlation between the fixed effects, like in
Abowd et al. (1999), there are functions bccorr and
fevcov for computing limited mobility bias corrected
correlations and variances with the method described in Gaure
(2014b).
Instrumental variable estimations are supported with 2SLS. Conditional F
statistics for testing reduced rank weak instruments as in Sanderson
and Windmeijer (2015) are available in condfstat. Joint
signficance testing of coefficients is available in waldtest.
The centering on the means is done with a tolerance which is set by
options(lfe.eps=1e-8) (the default). This is a somewhat conservative
tolerance, in many cases I'd guess 1e-6 may be sufficient. This may
speed up the centering. In the other direction, setting
options(lfe.eps=0) will provide maximum accuracy at the cost of
computing time and warnings about convergence failure.
The package is threaded, that is, it may use more than one cpu. The number
of threads is fetched upon loading the package from the environment variable
LFE_THREADS, OMP_THREAD_LIMIT, OMP_NUM_THREADS or
NUMBER_OF_PROCESSORS (for Windows), and stored by
options(lfe.threads=n). This option can be changed prior to calling
felm, if so desired. Note that, typically, lfe is
limited by memory bandwidth, not cpu speed, thus fast memory and large cache
is more important than clock frequency. It is therefore also not always true
that running on all available cores is much better than running on half of
them.
Threading is only done for the centering; the extraction of the group
effects is not threaded. The default method for extracting the group
coefficients is the iterative Kaczmarz-method, its tolerance is also the
lfe.eps option. For some datasets the Kaczmarz-method is converging
very slowly, in this case it may be replaced with a conjugate gradient
method by setting the option options(lfe.usecg=TRUE). Various
time-consuming parts of lfe may print progress reports, the minimum
interval in seconds is options(lfe.pint=1800).
The package has been tested on datasets with approx 20,000,000 observations
with 15 covariates and approx 2,300,000 and 270,000 group levels (the
felm took about 50 minutes on 8 cpus, the getfe
takes 5 minutes). Though, beware that not only the size of the dataset
matters, but also its structure, as demonstrated by Gaure (2014a).
The package will work with any number of grouping factors, but if more than
two, their interpretation is in general not well understood, i.e. one should
make sure that the group coefficients are estimable. A discussion of
estimability, the algorithm used, and convergence rate are available in
vignettes, as well as in the published papers in the citation list
(citation('lfe')).
In the exec-directory there is a perl-script lfescript which is used
at the author's site for automated creation of R-scripts from a simple
specification file. The format is documented in doc/lfeguide.txt.
lfe is similar in function, though not in method, to the Stata modules
a2reg and felsdvreg. The method is very similar to the one in
the Stata module reghdfe.
References
Abowd, J.M., F. Kramarz and D.N. Margolis (1999) High Wage
Workers and High Wage Firms, Econometrica 67 (1999), no. 2, 251–333.
http://dx.doi.org/10.1111/1468-0262.00020
Andrews, M., L. Gill, T. Schank and R. Upward (2008) High wage workers
and low wage firms: negative assortative matching or limited mobility bias?
J.R. Stat. Soc.(A) 171(3), 673–697.
http://dx.doi.org/10.1111/j.1467-985X.2007.00533.x
Correia, S. (2014) REGHDFE: Stata module to perform linear or
instrumental-variable regression absorbing any number of high-dimensional
fixed effects, Statistical Software Components, Boston College Department
of Economics. http://econpapers.repec.org/RePEc:boc:bocode:s457874
Croissant, Y. and G. Millo (2008) Panel Data Econometrics in R: The
plm Package, Journal of Statistical Software, 27(2).
http://www.jstatsoft.org/v27/i02/
Ouazad, A. (2008) A2REG: Stata module to estimate models with two
fixed effects. Statistical Software Components S456942, Boston College
Department of Economics.
http://ideas.repec.org/c/boc/bocode/s456942.html