R mlogit()函数:if(abs(x - oldx)< ftol){:缺少值需要TRUE / FALSE

时间:2017-10-19 22:53:38

标签: r mlogit

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

要做到这一点,我们有一个大型数据集,并试图通过mlogit.data()和mlogit()运行它,虽然我们一直得到同样的错误:

if(abs(x - oldx)< ftol){的错误:   缺少需要TRUE / FALSE的值

我的数据都没有消极或缺失,所以这非常令人困惑。我的语法是:

#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

我的语法是否有问题,或者我的数据可能是问题?

提前致谢, 安德鲁

6 个答案:

答案 0 :(得分:0)

if(abs(x - oldx)&lt; ftol){:缺少值需要TRUE / FALSE

时出错

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

查看:table(data2 $ Choice)以查看是否是这种情况

答案 1 :(得分:0)

在面板设置中,可能会出现一张或多张选择卡没有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 :(得分:0)

我有类似的问题,但最终发现了。就我而言,这是由于协变量值缺失而不是选择响应所致。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

以防万一其他人可能遇到相同的问题。当我有部分缺失时,当我运行选择模型(最大差异缩放)时,出现了此错误。例如。如果被访者必须对每个任务/组做出两个选择,但只能做出一个选择。

我可以通过删除属于缺失选择的那些观测值,同时保留进行有效选择的观测值来解决长格式数据集中的问题。

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

现在想象一个受访者只为“最重要”提供选择,而不为最不重要提供选择。在这种情况下,“最不重要”的5行在响应变量中都将为0。从数据中排除这5行解决了布奇错误,顺便说一句,结果与woudl提供的其他工具(例如Sawtooth的Lighthouse软件)完全相同。