Вы хотите избежать создания двоичных терминов самостоятельно.Фактически, способ обозначения mgcv подразумевает сплайн на day
, и вы должны включить day
как фактор в модель, а не все эти отдельные термины.
Итак,модель gam
будет иметь вид:
gam(y ~ s(x, bs='cs', by=day) + day, data = train, method="REML", select=TRUE)
, где day
- коэффициент с уровнями c('Monday','Tuesday', ....)
.
Тогда линейная модель становится:
lm(y ~ x * day, data = train)
Вы должны работать немного усерднее, чтобы получить расчетные средства на каждый день;используйте predict()
для модели gam()
с newdata
и одной строкой в день и type = 'terms'
, и вы можете добавить перехват к вкладу day
(эффект).Для модели lm()
это проще всего сделать с помощью пакета multcomp .
Вы также можете просто отбросить перехват (добавьте + 0
в формулу модели).Существуют и другие способы параметризации модели для моделирования, которые легко дадут вам необходимые оценки.
То, что ваши модели даже подходят, это потому, что R внутренне пропускает некоторые эффекты;вы не можете подобрать точку пересечения и все эти дневные условия, потому что одна из отдельных переменных дня линейно зависит от точки пересечения и поэтому не может быть однозначно идентифицирована.