繁体   English   中英

R中的xtlogit-logit固定效果

[英]xtlogit in R - logit fixed effects

我试图弄清楚如何在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和Time固定效果。 我试过了:

 mod.no <- bife(y ~ x | ID, data = panel)

是否需要像Stata的“ xtset”命令一样将数据设置为面板?

提前谢谢了!

编辑

我想在R中复制的Stata命令是:

xi: xtlogit Y X i.Time, fe

总的来说,我认为此处的策略是执行以下操作:

  1. 创建一个变量,其中包含预测变量的个体水平平均值。 使用dplyr最容易实现:

    data <- data $>$ group_by(ID) %>% mutate(X_mean = mean(X))

这里的神奇之处在于group_by函数,该函数使mean操作计算组均值而不是全局均值。

  1. 使用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作为预测变量并将该变量作为输入数据的一个因素而到达同一位置。 如果有很多时间点,可能会使输出变得笨拙。

受Stata的xt套件的启发,我一直在开发一个程序包以使其中的一些程序自动化,尽管在此关头我的程序包受到的限制更大。 它称为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所有panelr就是使我上面解释的自动化。 通过使用model = "within"参数,可以删除单个均值变量而不会影响X的对象内效应的估计。

panelr事情需要记录在案, panelr可能离CRAN提交panelr几个星期,在一些panelr情况下,事情出乎意料地中断了,我想更加灵活地处理时间。

也许像在Stata中一样尝试将Time变量强制为一个因子,并将其包含在bife公式中:

panel$Time <– as.factor(panel$Time)

mod.no <- bife(y ~ x + Time | ID, data = panel, bias_corr = "ana")

注意:您可能需要在最后加上bias_corr = "ana"来校正附带参数bias。

另外,在survival包中使用clogit函数也应该起作用:

mod.no <– clogit(y ~ x + strata(Time) + strata(ID), data = panel

strata()选项指示固定效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM