Многоуровневые модели для групп с разными предикторами

Aug 20 2020

Представьте, что я пытаюсь подогнать продукты под многоуровневую модель и хочу сгруппировать их по типам продуктов.

В случаях, когда типы продуктов имеют одни и те же предикторы, это просто. Например, вы можете оценить влияние цвета на продажи или что-то подобное.

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

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

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

Ответы

2 Eoin Aug 24 2020 at 20:52

Есть довольно разумный способ сделать это, если вы центрируете все свои предикторы, вычитая среднее значение.

Используя ваш пример, предположим, что у вас есть спортивные шорты, шорты и джинсы, и вашими числовыми предикторами являются а) яркость (определенная для всех категорий) и б) короткая длина (определенная только для шорт, NAдля брюк). Теперь, если вы центрируете оба своих числовых предиктора, вы получаете меры: а) темнее или светлее предметы, чем в среднем, и б) короче или длиннее среднего значения. Можно смело сказать, что брюки$\pm0$на см короче или длиннее среднего, поэтому присвойте этому предиктору значение 0 для всех элементов, которые не являются короткими (они не короче и не длиннее среднего). Затем вы можете установить многоуровневый подход, как обычно, позволяя всем предикторам различаться по категориям:

lmer(sales ~ 1 + centred_colour + centred_leg_length + 
             (1 + centred_colour + centred_leg_length | category),
     data=sales_data)

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

Если случится так, что в ваших данных окажется только одна категория коротких замыканий, если не удастся включить ее как случайный эффект, вам придется соответственно изменить свою модель:

lmer(sales ~ 1 + centred_colour + centred_leg_length + 
             (1 + centred_colour | category),
     data=sales_data)
1 Alex.C-L-ReinstateMonica Aug 24 2020 at 15:46

Попробуйте создать фиктивную переменную, равную 0, если у продукта нет функции (т. Е. Нет ноги), и 1, когда она есть. Затем превратите эту фиктивную переменную в коэффициент.

Если манекен не имеет функции, замените отсутствующее значение нулем.

Затем в своей модели взаимодействуйте с интересующей вас непрерывной переменной с переменной фиктивного фактора. Добавьте также переменные фиктивного фактора.


Примечание: я рад узнать от более знающего человека, почему это работает (или не работает в общем случае).