Does anyone have a nice clean way to get predict
behavior for felm
models?
library(lfe)
model1 <- lm(data = iris, Sepal.Length ~ Sepal.Width + Species)
predict(model1, newdata = data.frame(Sepal.Width = 3, Species = "virginica"))
# Works
model2 <- felm(data = iris, Sepal.Length ~ Sepal.Width | Species)
predict(model2, newdata = data.frame(Sepal.Width = 3, Species = "virginica"))
# Does not work
UPDATE (2020-04-02): The answer from Grant below using the new package fixest
provides a more parsimonious solution.
As a workaround, you could combine felm
, getfe
, and demeanlist
as follows:
library(lfe)
lm.model <- lm(data=demeanlist(iris[, 1:2], list(iris$Species)), Sepal.Length ~ Sepal.Width)
fe <- getfe(felm(data = iris, Sepal.Length ~ Sepal.Width | Species))
predict(lm.model, newdata = data.frame(Sepal.Width = 3)) + fe$effect[fe$idx=="virginica"]
The idea is that you use demeanlist
to center the variables, then lm
to estimate the coefficient on Sepal.Width
using the centered variables, giving you an lm
object over which you can run predict
. Then run felm
+getfe
to get the conditional mean for the fixed effect, and add that to the output of predict
.