我正在尝试使用R中的mlogit包来做一些分析。不幸的是,我对如何根据我拥有的数据类型指定适当的模型感到有点困惑。
具体来说,我的数据类型如下:
Individual Choice1 Choice2 Choice3 ...
A 1.24e4 256 17 ...
B 792 531 420 ...
C 26 1.8e5 930 ...
... ... ... ... ...本质上是一个交叉表,显示每个人做出特定选择的次数。下面是重现我的问题的代码:
library(mlogit)
data(Fishing)
otherFrame <- as.data.frame(xtabs(rep(1,1182) ~ income + mode, data = Fishing))
otherFrame$income <- as.numeric(as.character(otherFrame$income))
otherFrame <- otherFrame[otherFrame$Freq > 0, ]
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")
Fish2 <- mlogit.data(otherFrame, "mode", shape = "wide")
summary(mlogit(mode ~ 1 | income, data = Fish)) #model from mlogit examples
summary(mlogit(mode ~ 1 |income, data = Fish2, weights = Freq)) #my attempt to re-create the model with differently shaped data基本上,我的数据(未显示)可以放入与otherFrame相同的形状,但我无法将它们放入mlogit示例中使用的形状(因为有成百上千的选择和数以百万计的观察,因此大小令人望而却步)。otherFrame的关键是Freq列,它显示在给定其他一些变量(这里是income)的情况下做出选择(mode)的次数。
我的问题是最后两行代码会产生不同的结果。我假设第一行(直接来自mlogit示例)给出了正确的估计和标准误差。我认为第二个模型规范,以及我指定weights = Freq的替代数据“Fish2”,应该会产生相同的结果。不幸的是,虽然估计的斜率是相同的,但它们的标准误差却有很大的不同。我假设这是不正确的。
有人能帮我指定正确的模型吗?或者也许我的规范是正确的,估计的标准误差应该是不同的?
提前谢谢。
发布于 2018-01-26 12:00:06
我的理解是,weights参数并不代表案例权重,案例权重通常是为调查观察而开发的。然而,它会修正总的市场份额或Frequencies of alternatives,这就是为什么你会得到相同的估计。
mlogit将otherFrame视为包含57条记录的数据(即length(weights)而不是sum(weights)),而实际上它包含1182条记录的数据。换句话说,在不包括案例权重的情况下聚合数据会丢失信息-这解释了更高的标准误差。看看这两个拟合模型的vcov矩阵。
将第二个模型的t-stats乘以sqrt(sum(weights)/length(weights)),可以更接近地估计正确的t-stats。请注意,由于同样的原因,第二个模型中的对数似然(因此rho平方值)也不会正确。
其他商业软件,如Stata和alogit,都有在离散选择模型的情况下考虑权重的例程。
希望这能有所帮助!
https://stackoverflow.com/questions/48453320
复制相似问题