我试图弄清楚如何在 R 中执行固定效应 logit 回归(类似于 Stata 的 xtlogit 命令)。我读了几个包,例如“pglm”或“bife”,但无法运行我的模型。
我的数据保存为数据框,看起来像:
ID Time Y X
1 2000 1 0
1 2001 0 1
1 2002 1 1
...
1 2016 1 0
...
n
基本上我想运行固定效应 logit 回归:
y_jt = beta*x_jt + mu_j + pi_t + epsilon_jt
其中 j 是 ID,t 是时间,mu 是 ID 固定效应,pi 是时间固定效应,epsilon 是误差项。
我愿意使用任何软件包。我从“bife”开始,但不知道如何设置 ID 和时间固定效果。我试过:
mod.no <- bife(y ~ x | ID, data = panel)
我是否可能需要将数据设置为像 Stata 的“xtset”命令那样的面板?
提前谢谢了!
编辑
我想在 R 中复制的 Stata 命令是:
xi: xtlogit Y X i.Time, fe
最佳答案
总的来说,我认为这里的策略是执行以下操作:
dplyr
最容易实现这一点。 :data <- data $>$ group_by(ID) %>% mutate(X_mean = mean(X))
这里的魔力在于
group_by
函数,这会导致 mean
计算组均值而不是全局均值的操作。lme4
将 logit 模型估计为多级模型。这是我指定模型的方式:glmer(Y ~ X + X_mean + Time + (1 | ID), family = binomial)
“固定”和“随机”这两个术语在面板数据、多级建模和其他一些文献中真的很困惑,所以我不太清楚你如何概念化“时间的固定效应”。这个模型给你的是
X
的固定效果。因为 X
的系数将代表 X
的被试内效应.我包括Time
作为将年份视为附加预测器的预测器,其解释取决于它是连续的还是分类的。有些人会将其拟合为“随机”效应(如随机斜率或某些文献中的“增长曲线”)。你会这样做:glmer(Y ~ X + X_mean + Time + (Time | ID), family = binomial)
这估计了每个人不同的时间影响。
(1 | ID)
在第一个模型和 (Time | ID)
在第二个模型中告诉 lme4
分组变量是什么,在您的情况下是 ID
.您通过 ID
获得随机拦截在第一个模型中,随机截距加上随机斜率 Time
在第二个模型中。对您的第一篇文章的另一种解释是,您希望对 Time
进行随机拦截。同样,在这种情况下,您可以执行以下操作:glmer(Y ~ X + X_mean + (1 | Time) + (1 | ID), family = binomial)
或者,如果波浪很少,您可以通过包含
Time
到达同一个地方。作为预测器并使该变量成为输入数据中的一个因素。如果有很多时间点可能会使输出变得笨拙。受
xt
的启发,我一直在开发一个包来自动化其中的一些。来自 Stata 的套件,尽管此时我的包裹要有限得多。它叫panelr
并且目前必须从GitHub下载。更多信息请点击此处:https://github.com/jacob-long/panelr在这种情况下,使用
panelr
,你的情况会是这样的:library(panelr)
pdata <- panel_data(data, id = ID, wave = Time)
model <- wbm(Y ~ X, data = pdata, use.wave = TRUE, family = binomial)
全部
panelr
正在做的是自动化我上面解释的内容。您可以删除单个均值变量而不影响 X
的受试者内效应的估计值。通过使用 model = "within"
争论。panelr
此时距离 CRAN 提交可能还有几周的时间,因为有些事情需要记录,有一些边缘情况会意外中断,我希望在处理时间方面更加灵活。
关于r - R 中的 xtlogit - logit 固定效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48893637/