2

我需要运行一个按等级排序的 logit,其中一些人对备选方案的最大数量进行排名,而一些人的排名低于该最大值。

mlogit::mlogit.data不喜欢输入数据中每个人的等级数不同。

这是一个小例子,使用mlogit包中的数据。

在原始数据中,所有个人对 6 个备选方案进行排名,但此示例通过将每个个人排名的随机数设置为NA,然后设置为 6,即最大可能排名来修改这一点。

set.seed(62617)
data("Game2", package = "mlogit")
library(dplyr)
library(mlogit)

df1 <- Game2 %>% group_by(chid) %>% 
  mutate(ch = ifelse(ch > sample(2:6, size = 1), NA, ch))

dat <-  df1 %>% mutate(ch = replace(ch, is.na(ch), 6)) %>% as.data.frame()

G <- mlogit.data(dat, shape = "long", 
                 choice = "ch", 
                 alt.var = "platform", 
                 ranked = TRUE)

summary(mlogit(ch ~ own | hours + age, G, reflevel = "PC"))

这会导致以下错误:

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

我应该如何编码未排序的替代方案以使模型工作?

4

0 回答 0