我正在尝试使用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
列,其中显示了在给定其他变量(此处为mode
)的情况下选择(income
)的次数。
我遇到的问题是最后两行代码会产生不同的结果。我假设第一行(直接来自mlogit
示例)给出了正确的估计值和标准误差。我认为第二个模型规范,我指定weights = Freq
的替代数据“Fish2”应该给出相同的结果。不幸的是,虽然估计的斜率是相同的,但它们的标准误差却大不相同。我认为这是不正确的。
有人可以帮我正确指定模型吗?或许我的规范是正确的,估计的标准误差应该是不同的?
提前致谢。
答案 0 :(得分:0)
我的理解是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都有例程来考虑离散选择模型的案例权重。
希望有所帮助!