Ошибка Mlogit: Ошибка в файле resolve.default (H, g [! Fixed]): Процедура Lapack dgesv: система точно сингулярна: U [6,6] = 0

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

Первые несколько строк моего data.frame после уже запущенного на нем mlogit.data выглядят так:

ORDER_ID    PRODUCT_ID    DEVICE    PRICE    TOUCHPOINT    CHANNEL    1_or_2    CHOICE    chid    alt
123         566           laptop    99       paid          offline    1         TRUE      33      1
123         566           laptop    99       paid          offline    1         FALSE     33      2
123         534           phone     56       paid          offline    2         FALSE     45      1
123         534           phone     56       paid          offline    2         TRUE      45      2
124         876           laptop    85       unpaid        online     1         TRUE      111     1
124         876           laptop    85       unpaid        online     1         FALSE     111     2

Код, который я пытаюсь запустить:

Choice_mlg <- mlogit(Choice_A_or_B ~ 1 | Channel + Touchpoint + Price + Device, 
                                    data = ml_choice_1, reflevel = 1, na.action = na.exclude)

Затем я получаю следующее сообщение об ошибке:

Error in solve.default(H, g[!fixed]) : Lapack routine dgesv: system is exactly singular: U[6,6] = 0

Может ли кто-нибудь помочь в том, что я здесь делаю неправильно?

Спасибо и всего наилучшего


person steffiabc    schedule 24.09.2019    source источник


Ответы (1)


Ошибка означает, что матрица Гессе сингулярна, т.е. определитель равен нулю. По сути, вы не можете получить матрицу дисперсии, которая равна отрицательной обратной величине гессиана.

Если посмотреть на вашу модель и ваши данные, это может быть вызвано несколькими причинами. Вы не предоставили MWE, поэтому я могу опустить только ту информацию, которую вы предоставили.

  1. Посмотрите на свою переменную alt, она варьируется от 1 до 2, но обе альтернативы идентичны. Это означает, что нет абсолютно никаких различий между альтернативами для объяснения выбора. Это может привести к сингулярному в вычислительном отношении гессиану (другой причиной может быть очень сильная корреляция между альтернативами).
  2. Переменная вашего выбора называется Choice_A_or_B. Это не часть данных, поэтому его трудно увидеть, но в длинном формате он должен принимать значения TRUE/FALSE. Он должен быть TRUE для выбранной альтернативы и FALSE для всех невыбранных альтернатив в каждом случае выбора. Посмотрите на свою переменную CHOICE, которая выглядит здесь правильной.
  3. Глядя на переменную ORDER_ID, она одинакова для двух chid. Означает ли это, что один и тот же покупатель купил два товара?
  4. Есть ли причина, по которой вы указали Channel, Touchpoint, Price и Device как альтернативные варианты? Это не имеет значения для приведенного выше примера (см. Пункт 1), но должно быть тщательно продумано в вашей окончательной модели.

В общем, когда вы настраиваете свои данные (в длинном формате), вам нужно иметь одну строку для каждой альтернативы с индексами для индивидуума, случая выбора и альтернативы.

person edsandorf    schedule 11.10.2019