微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

多项 Logit 固定效应:Stata 和 R

如何解决多项 Logit 固定效应:Stata 和 R

我正在尝试在 Stata 的 mlogit 中运行具有年份固定效应的多项式 logit(面板数据:年份-国家/地区),但我没有得到某些模型的标准误差。当我在 R 中使用 multinom 运行相同的模型时,我得到了系数和标准误差。

我不经常使用 Stata,所以我可能会遗漏一些东西,或者我可能在 Stata 和 R 中运行不同的模型,因此不应该首先比较它们。可能会发生什么?

关于感兴趣模型的简单版本的一些细节:

我创建了一个数据示例来说明问题所在

  • 依赖变量(将其称为 DV1)具有 -1、0、1(无序和 0 作为参考)3 个类别

  • 自变量:2个连续变量,3个二元变量,3个二元变量中2个的交互作用

  • 年份:1995-2003

  • 模型中的观察数:900

在 R 中,我运行代码并得到如下系数和标准误差。

R 版本的代码创建数据和运行模型:

## Fabricate example data 
library(fabricatr)
data <- fabricate(
  N = 900,id = rep(1:900,1),IV1 = draw_binary(0.5,N = N),IV2 = draw_binary(0.5,IV3 = draw_binary(0.5,IV4 = draw_normal_icc(mean = 3,N = N,clusters = id,ICC = 0.99),IV5 = draw_normal_icc(mean = 6,ICC = 0.99))

library(AlgDesign)
DV = gen.factorial(c(3),1,center=TRUE,varNames=c("DV"))
year = gen.factorial(c(9),varNames=c("year"))

DV = do.call("rbind",replicate(300,DV,simplify = FALSE))
year = do.call("rbind",replicate(100,year,simplify = FALSE))

year[year==-4]= 1995
year[year==-3]= 1996
year[year==-2]= 1997
year[year==-1]= 1998
year[year==0]= 1999
year[year==1]= 2000
year[year==2]= 2001
year[year==3]= 2002
year[year==4]= 2003

data1=cbind(data,year)
data1$DV1 = relevel(factor(data1$DV),ref = "0")

## Save data as csv file (to use in Stata)
library(foreign)
write.csv(data1,"datafile.csv",row.names=FALSE)

## Run multinom
library(nnet)
model1 <- multinom(DV1 ~ IV1 + IV2 + IV3 + IV4 + IV5 + IV1*IV2 + as.factor(year),data = data1)

Results from R

当我在 Stata 中使用 mlogit(没有固定效应)运行模型时,我得到了系数和标准误差。

所以我尝试使用 Stata 三种不同的方式在模型中包含年份固定效应,但都没有效果

  1. femlogit
  • 不允许使用因子变量和时间序列运算符
  • depvar 和 indepvars 不得包含因子变量或时间序列运算符
  1. mlogit
  • fe 选项:fe 不允许
  • used i.year:省略某些变量和/或不给我标准错误,只显示系数(下面的代码示例)
* Read file
  import delimited using "datafile.csv",clear case(preserve)
  
* Run regression
    mlogit DV1 IV1 IV2 IV3 IV4 IV5 IV1##IV2 i.year,base(0) iterate(1000)

Stata results

  1. xtmlogit
  • 错误 - 无法运行
  • 错误信息:排列总数为2,389,461,218;如此多的排列需要大量内存,并可能导致运行时间过长;无论如何使用选项强制继续,或考虑使用选项 rsample()

解决方法

固定效应和非线性模型(例如 logits)是一种尴尬的组合。在线性模型中,您可以简单地添加虚拟/贬低以摆脱特定于组的拦截,但在非线性模型中,这些都不起作用。我的意思是你可以在技术上做到这一点(我认为这就是 R 代码正在做的事情),但从概念上讲,它的实际作用非常不清楚。

计量经济学家在这方面花费了大量时间,这导致了一些变通方法,通常称为条件对数。 IIRC 这是在 femlogit 中实现的。我认为您的代码中的错误是您试图通过虚拟规范(i.year)包含固定效果。相反,您应该xtset您的数据,然后运行 ​​femlogit 而不使用虚拟机。

xtset year
femlogit DV1 IV1 IV2 IV3 IV4 IV5 IV1##IV2

请注意,这些条件 logit 模型可能非常慢。就个人而言,我更喜欢运行两个一对一线性回归(1=1 和 0/-1 设置为零,然后 -1=1 和 0/1 设置为零)。然而,意见分歧(伍尔德里奇似乎也是一个粉丝,许多其他人则不是)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。