mgcv: ошибка модели имеет больше коэффициентов, чем данных, связанных с аргументом в gam () - PullRequest
0 голосов
/ 03 июля 2019

В случае a, gam-код в пакете mgcv R. работает хорошо.

library(mgcv)
dat <- gamSim(1,n=400,dist="normal",scale=2)

num_knots = nrow(dat)
fit <- gam(y~s(x0, bs = "cr", k = num_knots, m=2),data=dat)
summary(fit)

Но после того, как я добавил аргумент в gam (), он сообщил об ошибке «Модель имеет больше коэффициентов, чемdata ".

fit <- gam(y~s(x0, bs = "cr", k = num_knots, m=2, by = x1),data=dat)

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

1 Ответ

1 голос
/ 04 июля 2019

Когда вы передаете непрерывную переменную в by, вы получаете модель изменяющегося коэффициента, в которой эффект x1 изменяется как плавная функция x0.

Что происходит вВо-первых, из-за ограничений идентифицируемости, применяемых к расширению базиса для x0, вы запросили num_knots базисных функций, но на самом деле получили num_knots - 1 базисных функций.Когда вы добавляете перехват, вы получаете num_knots коэффициентов, которые подходят для этой модели, так как это сплайн с штрафом (хотя вы, вероятно, хотите method = 'REML').Ограничение идентифицируемости применяется потому, что существует базовая функция (или комбинация), которая смешивается с пересечением модели, и вы не можете вписать два постоянных члена в модель и дать им уникальную идентификацию.

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

...