mgcv: как указать взаимодействие между Smooth и Factor?

В R я хотел бы подогнать игровую модель с категориальными переменными. Я думал, что смогу сделать это как с (cat — категориальная переменная).

lm(data = df, formula = y ~ x1*cat + x2 + x3);

Но я не могу делать такие вещи, как:

gam(data = df, formula = y ~ s(x1)*cat + s(x2) + x3)

но работает следующее:

gam(data = df, formula = y ~ cat + s(x1) + s(x2) + x3)

Как добавить категориальную переменную только к одному из сплайнов?


person Courvoisier    schedule 10.04.2017    source источник
comment
Этот вопрос здесь не по теме, потому что он концентрируется на функциях в R.   -  person Michael R. Chernick    schedule 10.04.2017
comment
То, что вы, кажется, пытаетесь сделать во втором фрагменте кода (и взаимодействие между категориальной переменной и сглаживанием), можно выполнить с помощью функции by. то есть s(x,by=cat) будет соответствовать отдельному сглаживанию для каждого уровня cat.   -  person    schedule 10.04.2017


Ответы (1)


Один из комментариев более или менее рассказал вам, как это сделать. Используйте переменную by:

s(x1, by = cat)

Это создает класс сглаживания «фактор сглаживания» fs, где функция сглаживания x1 создается для каждого уровня фактора. Параметры сглаживания тоже дублируются, но не связаны, поэтому оцениваются неприлично. Вы можете установить

s(x1, by = cat, id = 0)

использовать один параметр сглаживания для всех «суб-сглаживаний».

Также обратите внимание, что контраст не применяется к фактору, но сглаженная функция по-прежнему зависит от ограничения центрирования. Это означает, что вам также нужно указать факторную переменную как фиксированный эффект:

s(x1, by = cat) + cat
person Zheyuan Li    schedule 10.04.2017
comment
Небольшое уточнение: s(x1, by = cat) не создает гладкость класса "fs" - если бы это было так, вам не понадобился бы + cat для центрирования. Если вам нужно то, что mgcv называет "fs" гладким, вам нужен s(x1, cat, bs = "fs") (а не параметрический cat термин). - person Gavin Simpson; 26.04.2017