Это один из тех неприятных побочных эффектов, когда mgcv::gamm()
является чем-то вроде клочья.
Компонент $gam
на самом деле содержит компонент $family
, просто объект $gam
только класса "gam"
, тогда как mgcv::gam()
объект модели также наследуется от класса "glm"
, и для этого есть метод family.glm
. Я считаю, что это связано с тем, что объект $gam
не является полностью совместимым объектом "gam"
и, следовательно, не является полным объектом "glm"
, следовательно, он не наследуется от "glm"
,. Это также может быть просто недосмотр; долгое время объект, возвращаемый mgcv::gamm()
, был просто класса "list"
!
Самый простой способ - написать собственный метод family
для объектов класса "gamm"
(так что не нужно запоминать, из какого компонента извлекать) и для класса "gam"
:
family.gamm <- function(object, ...) {
family(object$gam)
}
family.gam <- function(object, ...) {
object$family
}
Учитывая, что определение family.glm
точно соответствует определению метода .gam
, приведенному выше, с этим зависанием вокруг в вашем рабочем пространстве не будет мешать остальным mgcv .
library("mgcv")
set.seed(1)
dat <- gamSim(1, n = 400, dist = "normal", scale = 2, verbose = FALSE)
m1 <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = "REML")
m2 <- gamm(y ~ s(x0) + s(x1) + s(x2) + s(x3), data = dat, method = "REML")
family(m1)
family(m2)
Производство
> family(m1)
Family: gaussian
Link function: identity
> family(m2)
Family: gaussian
Link function: identity