有没有人有一个很好的清洁方式来获取模型的predict行为felm?
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
Run Code Online (Sandbox Code Playgroud)
pba*_*lis 13
作为一种变通方法,你可以结合felm,getfe以及demeanlist如下:
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"]
Run Code Online (Sandbox Code Playgroud)
我们的想法是你使用demeanlist中心变量,然后lm估计Sepal.Width使用居中变量的系数,给你一个lm可以运行的对象predict.然后运行felm+ getfe以获得固定效果的条件均值,并将其添加到输出中predict.
迟到了,但新的fixst包(链接)有一个 predict 方法。它使用与 lfe 非常相似的语法支持高维固定效果(和聚类等)。值得注意的是,对于我测试过的基准案例,它也比 lfe快得多。
library(fixest)
model_feols <- feols(data = iris, Sepal.Length ~ Sepal.Width | Species)
predict(model_feols, newdata = data.frame(Sepal.Width = 3, Species = "virginica"))
# Works
Run Code Online (Sandbox Code Playgroud)
这可能不是您正在寻找的答案,但似乎作者没有向lfe包中添加任何功能,以便通过使用拟合felm模型对外部数据进行预测.主要焦点似乎是对群体固定效应的分析.但是,有趣的是,在包的文档中提到了以下内容:
该对象与'lm'对象有一些相似之处,并且为lm设计的一些后处理方法可能恰好起作用.然而,有必要强迫对象成功.
因此,可能有可能将felm对象强制转换为lm对象以获得一些附加lm功能(如果对象中存在所有必需信息以执行必要的计算).
lfe包旨在在非常大的数据集上运行,并且努力节省内存:作为直接结果,felm对象不使用/包含qr分解,而不是lm对象.不幸的是,该lm predict过程依赖于此信息来计算预测.因此,强制felm对象和执行预测方法将失败:
> model2 <- felm(data = iris, Sepal.Length ~ Sepal.Width | Species)
> class(model2) <- c("lm","felm") # coerce to lm object
> predict(model2, newdata = data.frame(Sepal.Width = 3, Species = "virginica"))
Error in qr.lm(object) : lm object does not have a proper 'qr' component.
Rank zero or should not have used lm(.., qr=FALSE).
Run Code Online (Sandbox Code Playgroud)
如果您真的必须使用此包来执行预测,那么您可以使用felm对象中可用的信息编写自己的此功能的简化版本.例如,OLS回归系数可通过model2$coefficients.
Tch*_*hke -2
我想你要找的可能就是这个lme4包裹。我能够使用以下方法进行预测:
library(lme4)
data(iris)
model2 <- lmer(data = iris, Sepal.Length ~ (Sepal.Width | Species))
predict(model2, newdata = data.frame(Sepal.Width = 3, Species = "virginica"))
1
6.610102
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微尝试一下才能指定您正在寻找的特定效果,但是该软件包有详细的文档记录,因此这应该不是问题。
| 归档时间: |
|
| 查看次数: |
4867 次 |
| 最近记录: |