Функция R mlogit(): ошибка в if (abs(x - oldx) ‹ ftol) { : отсутствует значение там, где требуется TRUE/FALSE

У меня проблемы с функцией 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

Похоже ли, что у меня проблема с синтаксисом, или, вероятно, проблема связана с моими данными?


person Andrew Colin    schedule 19.10.2017    source источник
comment
Включение минимально воспроизводимого примера в ваш вопрос увеличит ваши шансы получения ответа.   -  person Samuel    schedule 20.10.2017


Ответы (6)


В настройках панели потенциально может случиться так, что одна или несколько выбранных вами карт не имеют значения 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 игнорирует отсутствующие переменные ответа, R рассматривает это как проблему, которую необходимо решить.

person Bryan Michael    schedule 01.06.2018

У меня была такая же ошибка. Это было решено, когда я упорядочил данные по уникальному идентификатору и альтернативному идентификатору. По какой-то причине mlogit требует, чтобы все экземпляры выбора были сложены вместе.

person Gaurav    schedule 16.07.2019

Ошибка в if (abs(x - oldx) ‹ ftol) { : отсутствует значение там, где требуется TRUE/FALSE

Предполагает, что если ваша переменная ответа является двоичной, т.е. 1/0, то одно или несколько значений отличаются от 1/0.

Посмотрите на: table(data2$Choice), чтобы убедиться, что это так.

person cousin_pete    schedule 07.01.2018

У меня была аналогичная проблема, но в конце концов я понял. В моем случае это связано с отсутствием значения ковариат, а не с ответом выбора.

person SLi    schedule 08.10.2018

У меня была эта проблема, когда мои данные включали ситуации выбора (вопросы, которые задавали участникам), в которых ни один из вариантов не был выбран. Удаление этих строк устранило проблему.

person Nina Amenta    schedule 27.08.2019
comment
Привет, добро пожаловать в СО! ОП заявил, что: ни один из моих данных не является отрицательным или отсутствует. Также укажите обоснованные причины удаления данных - часто это невозможно восстановить, поэтому, возможно, укажите подробности того, как это сделать с минимальными последствиями, или какое-либо другое обоснование. - person Pranav Kasetti; 27.08.2019

На всякий случай, если у других может быть такая же проблема. Я получил эту ошибку, когда запустил свою модель выбора (максимальное масштабирование разницы), когда у меня были частичные пропуски. Например. если респондент должен был сделать два выбора для каждого задания/набора, но был сделан только один выбор.

Я мог бы решить эту проблему в наборе данных длинного формата, отбросив те наблюдения, которые принадлежали отсутствующему выбору, сохранив при этом наблюдения, в которых был сделан правильный выбор.

Например. предположим, что у меня есть опрос с 9 задачами/наборами, и в каждой задаче/наборе предусмотрено 5 альтернатив. В каждом задании мои респонденты должны были сделать два выбора, то есть выбрать один из 5 вариантов как «наиболее важный» и один из вариантов как «наименее важный». В результате получается набор данных, содержащий 5*9*2 = 90 строк на одного респондента. Существует ровно 5 строк для каждой комбинации задача*выбор (например, 5 строк для задачи 1, содержащей альтернативы, где ровно одна из этих 5 строк кодируется как 1 в переменной ответа в случае, если она была выбрана как наиболее (или наименее) важная альтернатива. ).

Теперь представьте, что респондент предоставляет выбор только для «самого важного», но не для наименее важного. В таком случае все 5 строк для «наименее важных» будут иметь 0 в переменной ответа. Исключение этих 5 строк из данных решает вышеуказанную проблему с ошибкой, и, кстати, приводит к точно таким же результатам, как и другие инструменты (например, программное обеспечение Sawtooth's Lighthouse).

person deschen    schedule 05.11.2019