gpt4 book ai didi

r - 使用具有标准误差的 felm 输出进行预测

转载 作者:行者123 更新时间:2023-12-02 10:29:31 24 4
gpt4 key购买 nike

如果使用 felm 中的投影方法清除固定效应,是否有办法从 lfe::felm 中获得具有标准误差的预测行为?这个问题与问题here非常相似。 ,但该问题的任何答案都不能用于估计标准误差或置信/预测区间。我知道目前没有 predict.felm,但我想知道是否有类似于上面链接的解决方法,也可以用于估计预测间隔

library(DAAG)
library(lfe)

model1 <- lm(data = cps1, re74 ~ age + nodeg + marr)
predict(model1, newdata = data.frame(age=40, nodeg = 0, marr=1), se.fit = T, interval="prediction")$fit
# Result: fit lwr upr
# 1 18436.18 2339.335 34533.03

model2 <- felm(data = cps1, re74 ~ age | nodeg + marr)
predict(model2, newdata = data.frame(age=40, nodeg = 0, marr=1), se.fit = T, interval="prediction")$fit
# Does not work

目标是估计 yhat 的预测区间,为此我认为我需要计算完整的方差-协方差矩阵(包括固定效应)。我一直无法弄清楚如何做到这一点,我想知道它在计算上是否可行。

最佳答案

与几个人交谈后,我认为不可能直接从 felm 获得 yhat=Xb 的分布估计(其中 X 包括协变量和固定效应),这就是这个问题的归结到。然而,引导它们是可能的。以下代码并行执行此操作。性能还有改进的空间,但这给出了总体思路。

注意:这里我不计算完整的预测区间,只计算 Xb 上的 SE,但获得预测区间很简单 - 只需将 sigma^2 的根添加到 SE 中即可。

library(DAAG)
library(lfe)
library(parallel)

model1 <- lm(data = cps1, re74 ~ age + nodeg + marr)
yhat_lm <- predict(model1, newdata = data.frame(age=40, nodeg = 0, marr=1), se.fit = T)

set.seed(42)
boot_yhat <- function(b) {
print(b)
n <- nrow(cps1)
boot <- cps1[sample(1:n, n, replace=T),]

lm.model <- lm(data=demeanlist(boot[, c("re74", "age")], list(factor(boot$nodeg), factor(boot$marr))),
formula = re74 ~ age)
fe <- getfe(felm(data = boot, re74 ~ age | nodeg + marr))

bootResult <- predict(lm.model, newdata = data.frame(age = 40)) +
fe$effect[fe$fe == "nodeg" & fe$idx==0] +
fe$effect[fe$fe == "marr" & fe$idx==1]
return(bootResult)
}

B = 1000
yhats_boot <- mclapply(1:B, boot_yhat)

plot(density(rnorm(10000, mean=yhat_lm$fit, sd=yhat_lm$se.fit)))
lines(density(yhats), col="red")

关于r - 使用具有标准误差的 felm 输出进行预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48634449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com