我正在尝试在Stata中的
mlogit
中运行具有年份固定效应的多项式logit(面板数据:年份-国家/地区),但我没有得到某些模型的标准误差。当我在 R 中使用 multinom
运行相同的模型时,我得到了系数和标准误差。
我不经常使用 Stata,所以我可能会遗漏一些东西,或者我可能在 Stata 和 R 中运行不同的模型,并且一开始就不应该比较它们。可能会发生什么?
关于感兴趣模型的简单版本的一些细节:
我创建了一个数据示例来展示问题所在
因变量(将称为DV1)具有-1、0、1 3个类别(无序和0作为参考)
自变量: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, N = N),
IV3 = draw_binary(0.5, N = N),
IV4 = draw_normal_icc(mean = 3, N = N, clusters = id, ICC = 0.99),
IV5 = draw_normal_icc(mean = 6, N = N, clusters = id, ICC = 0.99))
library(AlgDesign)
DV = gen.factorial(c(3), 1, center=TRUE, varNames=c("DV"))
year = gen.factorial(c(9), 1, center=TRUE, 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, DV, 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)
当我在 Stata 中使用
mlogit
(无固定效应)运行模型时,我得到了系数和标准误差。
所以我尝试使用 Stata 三种不同的方式在模型中包含年份固定效应,但没有任何效果:
femlogit
mlogit
* 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)
xtmlogit
固定效应和非线性模型(例如 logits)是一个尴尬的组合。在线性模型中,您可以简单地添加虚拟/贬低来消除特定于组的截距,但在非线性模型中,这些都不起作用。我的意思是你可以从技术上做到这一点(我认为这就是 R 代码正在做的事情),但从概念上讲,它实际上是做什么的还不清楚。
计量经济学家在这方面花费了大量时间,从而产生了一些解决方法,通常称为“条件 logit”。 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 设置为零)。然而,意见存在分歧(伍德里奇似乎也是粉丝,但其他许多人则不是)。