如何在 gamm mgcv 模型上使用反 link 函数
How to use inverse link functions on gamm mgcv model
我使用了反 link 函数,
ilink <- family(gam_model)$linkinv
用于创建时间序列交互图,效果很好。
我将模型替换为 gamm 模型,以考虑模型中的自相关。是否可以在 gamm 模型上使用反 link 函数?我试过了
ilink <- family(gamm_model)$linkinv
ilink <- family(gamm_model$gam)$linkinv
ilink <- family(gamm_model$lme)$linkinv
但是对于所有选项它都显示错误:
使用方法错误("family"):
没有适用于 'family' 的方法应用于 class "c('gamm', 'list')"
的对象
使用方法错误("family"):
没有适用于 'family' 的方法应用于 class "gam"
的对象
使用方法错误("family"):
没有适用于 'family' 的方法应用于 class "lme"
的对象
第二个选项令人惊讶,因为它适用于原始 gam 模型,calss "gam"
谢谢
德沃拉
这是 mgcv::gamm()
有点乱七八糟的不幸副作用之一。
$gam
组件实际上包含一个 $family
组件只是 $gam
对象是 只有 的 class "gam"
而 mgcv::gam()
模型对象 也 继承自 class "glm"
并且有一个 family.glm
方法。我认为这是由于 $gam
对象不是完全兼容的 "gam"
对象,因此不是完整的 "glm"
对象,因此它没有继承自 "glm"
。这也可能只是一个疏忽;很长一段时间 mgcv::gamm()
返回的对象只是 class "list"
!
最简单的方法是为 class "gamm"
的对象编写您自己的 family
方法(这样您就不必记住要从哪个组件中提取) class "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
我使用了反 link 函数,
ilink <- family(gam_model)$linkinv
用于创建时间序列交互图,效果很好。
我将模型替换为 gamm 模型,以考虑模型中的自相关。是否可以在 gamm 模型上使用反 link 函数?我试过了
ilink <- family(gamm_model)$linkinv
ilink <- family(gamm_model$gam)$linkinv
ilink <- family(gamm_model$lme)$linkinv
但是对于所有选项它都显示错误:
使用方法错误("family"): 没有适用于 'family' 的方法应用于 class "c('gamm', 'list')"
的对象使用方法错误("family"): 没有适用于 'family' 的方法应用于 class "gam"
的对象使用方法错误("family"): 没有适用于 'family' 的方法应用于 class "lme"
的对象第二个选项令人惊讶,因为它适用于原始 gam 模型,calss "gam"
谢谢 德沃拉
这是 mgcv::gamm()
有点乱七八糟的不幸副作用之一。
$gam
组件实际上包含一个 $family
组件只是 $gam
对象是 只有 的 class "gam"
而 mgcv::gam()
模型对象 也 继承自 class "glm"
并且有一个 family.glm
方法。我认为这是由于 $gam
对象不是完全兼容的 "gam"
对象,因此不是完整的 "glm"
对象,因此它没有继承自 "glm"
。这也可能只是一个疏忽;很长一段时间 mgcv::gamm()
返回的对象只是 class "list"
!
最简单的方法是为 class "gamm"
的对象编写您自己的 family
方法(这样您就不必记住要从哪个组件中提取) class "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