mlogit: 需要 TRUE/FALSE 值的地方出现了缺失值

7
我有一份离散选择实验(DCE)的数据,研究不同行业人才的招聘偏好,并将其格式化为长格式。我想使用mlogit进行建模。我已将数据导出,并可以成功地在Stata中使用asclogit命令运行模型,但我在R中运行时遇到了问题。
以下是前25行数据的快照:
> data[1:25,]
   userid    chid item sector outcome cul fit ind led prj rel
1   11275  211275    2      1       1   0   1   0   1   1   1
2   11275  211275    2      2       0   1   0   0   0   0   0
3   11275  211275    2      0       0   0   0   1   1   0   1
4   11275  311275    3      0       1   1   1   0   0   0   1
5   11275  311275    3      2       0   0   1   0   0   0   1
6   11275  311275    3      1       0   0   1   0   0   0   0
7   11275  411275    4      0       0   1   0   1   1   0   0
8   11275  411275    4      2       1   0   1   1   1   1   0
9   11275  411275    4      1       0   0   1   0   1   0   0
10  11275  511275    5      1       1   1   0   1   0   1   1
11  11275  511275    5      2       0   0   0   1   1   0   0
12  11275  511275    5      0       0   0   0   1   1   1   0
13  11275  611275    6      0       0   0   1   1   0   0   1
14  11275  611275    6      1       1   1   1   1   0   0   1
15  11275  611275    6      2       0   1   1   1   0   1   0
16  11275  711275    7      1       0   0   0   0   0   1   0
17  11275  711275    7      0       0   1   0   0   1   1   0
18  11275  711275    7      2       1   1   0   0   1   1   1
19  11275  811275    8      0       1   0   1   0   0   1   1
20  11275  811275    8      1       0   1   0   1   1   1   1
21  11275  811275    8      2       0   0   0   0   0   1   1
22  11275  911275    9      0       0   1   1   0   0   1   0
23  11275  911275    9      2       1   1   1   1   1   0   1
24  11275  911275    9      1       0   1   0   1   1   0   0
25  11275 1011275   10      0       0   0   0   0   0   0   0

userid和chid是因子变量,其余为数值型变量。这些变量的含义如下: Userid是唯一的回答者ID。 chid是每个回答者的唯一选择集ID。 item是选择集ID(在回答者之间重复)。 sector是备选项(3个不同的行业)。 outcome是回答者在给定的选择集中选择的备选项。 cul-rel是二元因子变量,根据实验设计,在备选项之间变化。

以下是我的mlogit语法:

mlogit(outcome~cul+fit+ind+led+prj+rel,shape="long",
       data=data,id.var=userid,chid.var="chid",
       choice=outcome,alt.var="sector")

这是我得到的错误:

Error in if (abs(x - oldx) < ftol) { : 
  missing value where TRUE/FALSE needed

我已经确保没有数据丢失,并且每组选择都有恰好1个选定的替代品。 为什么在 Stata 中使用完全相同的数据集运行模型时,会出现此错误呢?我可能在某个地方错误地阅读了 mlogit 语法。如果有帮助的话,我的 Stata 语法是: asclogit outcome cul fit rel ind fit led prj,case(chid) alternatives(sector)

2个回答

9

我自问自答,因为我已经弄清楚了。

R mlogit无法处理在选择集中没有选择任何替代品的情况。R还需要按正确顺序排序数据,每个选择集中的替代品必须在一行中。由于某些数据管理原因,我没有做到这一点。有趣的是,Stata可以处理这两种情况,所以我的Stata命令有效。

另外,对于那些感兴趣的人,Stata的asclogit和R的mlogit给出完全相同的结果。当这种情况发生时总是很好的。


2
抱歉再次提出这个问题,但我无法弄清楚在选择集不同的情况下该怎么办。即使在某些设置中没有可用的选择,R是否要求每个备选选择设置都有一行?Stata如何处理这个问题? - gannawag

-3
您可能需要使用mlogit.data()来整理数据。在?mlogit中有示例。希望这可以帮到您。

我尝试过了,结果一样。我也在我的R代码中提供了这些参数。 - robin.datadrivers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接