【问题标题】:R mlogit() function: Error in if (abs(x - oldx) < ftol) { : missing value where TRUE/FALSE neededR mlogit() 函数:if (abs(x - oldx) < ftol) { 中的错误:需要 TRUE/FALSE 的缺失值
【发布时间】:2017-10-19 22:53:37
【问题描述】:

我在使用 mlogit() 函数时遇到问题。我试图预测给定集合中的哪些变量是参加我们调查的人最喜欢的。我试图预测变量的最佳组合以创建最首选的选项。基本上,我们测量的是“名称”、“徽标大小”、“设计”、“主题”、“风味”和“颜色”。

为此,我们有一个大型数据集,并试图通过 mlogit.data() 和 mlogit() 运行它,尽管我们不断收到相同的错误:

if (abs(x - oldx)

我的数据都不是负数或缺失,所以这很令人困惑。我的语法是:

#Process data in mlogit.data()

data2 <- 
  mlogit.data(data=data, choice="Choice", 
              shape="long", varying=5:10, 
              alt.levels=paste("pos",1:3))

#Make character columns factors and "choice" column (the one we are 
#measuring) a numeric.

data2$Name <- as.factor(data2$Name)
data2$Logo.Size <- as.factor(data2$Logo.Size)
data2$Design <- as.factor(data2$Design)
data2$Theme <- as.factor(data2$Theme)
data2$Color <- as.factor(data2$Color)
data2$Choice <- as.numeric(as.character(data2$Choice))

##### RUN MODEL ##### 
m1 <- mlogit(Choice ~ 0 + Name + Logo.Size + Design + Theme + Flavor 
+ Color, data = data2)

m1

看起来是我的语法有问题,还是我的数据有问题?

【问题讨论】:

标签: r mlogit


【解决方案1】:

在面板设置中,您的一张或多张选择卡可能没有 TRUE 值。一种解决方法是丢弃缺少选项的选项卡。

## Use data.table
library(data.table)

## Drop choice cards that received no choice
data.table[, full := sum(Choice), by=Choice_id]
data.table.full <- data.table[full!=0,]

这是一个特定于 mlogit() 的问题。例如,STATA 的混合 logit 方法忽略了缺失的响应变量,R 认为这更多是需要解决的问题。

【讨论】:

    【解决方案2】:

    我有同样的错误。当我按唯一 ID 和备用 ID 排列数据时,它得到了解决。出于某种原因,mlogit 要求将所有选择实例堆叠在一起。

    【讨论】:

      【解决方案3】:

      if (abs(x - oldx)

      建议如果您的响应变量是二进制的,即 1/0,那么其中一个或多个值不是 1/0

      查看:table(data2$Choice) 看看是不是这样

      【讨论】:

        【解决方案4】:

        我有类似的问题,但最终想通了。在我的情况下,这是由于协变量的缺失值而不是选择响应。

        【讨论】:

          【解决方案5】:

          当我的数据包含未选择任何选项的选择情况(询问参与者的问题)时,我遇到了这个问题。删除这些行解决了问题。

          【讨论】:

          • 嗨,欢迎来到 SO! OP 声明:“我的所有数据都不是负面的或缺失的”。还请提供删除数据的正当理由 - 通常这无法恢复,因此请详细说明如何在影响最小的情况下执行此操作,或提供其他理由。
          【解决方案6】:

          以防其他人可能有同样的问题。当我有部分缺失时,当我运行我的选择模型(最大差异缩放)时,我得到了这个错误。例如。如果受访者必须为每个任务/集合做出两个选择,但只做出了一个选择。

          我可以在长格式数据集中解决这个问题,方法是删除那些属于缺失选择的观察结果,同时保留做出有效选择的观察结果。

          例如假设我有一项包含 9 个任务/集的调查,并且在每个任务/集中提供了 5 个备选方案。在每项任务中,我的受访者必须做出两个选择,即选择 5 个备选方案中的一个作为“最重要”,将一个备选方案选择为“最不重要”。这导致每个受访者有 5*9*2 = 90 行的数据集。每个任务*选择组合正好有 5 行(例如,包含备选方案的任务 1 有 5 行,其中这 5 行中恰好有一个在响应变量中被编码为 1,以防它被选为最(或最不)重要的备选方案)。

          现在假设受访者只提供“最重要”的选项,但没有提供最不重要的选项。在这种情况下,“最不重要”的 5 行在响应变量中都将为 0。从数据中排除这 5 行可以解决上述错误问题,顺便说一句,会导致与其他工具(例如 Sawtooth 的 Lighthouse 软件)提供的完全相同的结果。

          【讨论】:

            【解决方案7】:

            再 (1)

            "data2 <-   mlogit.data(data=data, choice="Choice", 
                      shape="long", varying=5:10, 
                      **alt.levels=paste("pos",1:3))**"
            

            和(2)

            "m1 <- mlogit(**Choice** ~ 0 + Name + Logo.Size + Design + Theme + Flavor + Color, data = data2)"
            

            除了确保填写所有数据外,我只想强调一点:(1)级别名称需要与分隔符后面的变量名称部分完全匹配。并且,(2)模型中的DV需要是出现在分隔符之前的变量名。

            示例:原始变量“Media”有 5 个类别 -> 5 个虚拟变量“Med_Radio”、“Med_TV”等:级别名称需要是“Radio”、“TV”等,与所写完全一致。而且你必须在模型中加入“Med”,而不是“Media”,作为 DV。

            这解决了我的问题。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-07-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多