【问题标题】:How to use inverse link functions on gamm mgcv model如何在 gamm mgcv 模型上使用反向链接函数
【发布时间】:2020-05-01 23:01:58
【问题描述】:

我使用了反向链接函数,

ilink <- family(gam_model)$linkinv

用于创建时间序列交互图,效果很好。

我将模型替换为 gamm 模型,以考虑模型中的自相关。是否可以在 gamm 模型上使用反向链接函数?我试过了

ilink <- family(gamm_model)$linkinv
ilink <- family(gamm_model$gam)$linkinv
ilink <- family(gamm_model$lme)$linkinv

但对于所有选项,它都会显示错误:

UseMethod("family") 中的错误: 没有适用于“家庭”的方法应用于“c('gamm','list')”类的对象

UseMethod("family") 中的错误: 没有适用于“家庭”的方法应用于“gam”类的对象

UseMethod("family") 中的错误: 没有适用于“家庭”的方法应用于“lme”类的对象

第二个选项令人惊讶,因为它适用于原始 gam 模型,名为“gam”

谢谢 德沃拉

【问题讨论】:

    标签: r gam mgcv


    【解决方案1】:

    这是mgcv::gamm() 有点笨拙的不幸副作用之一。

    $gam 组件实际上包含一个$family 组件,只是$gam 对象属于"gam" 类,而mgcv::gam() 模型对象 /em> 继承自类 "glm" 并且有一个 family.glm 方法。我相信这是由于$gam 对象不是完全兼容的"gam" 对象,因此不是完整的"glm" 对象,因此它不是从"glm" 继承的。这也可能只是一个疏忽;很长一段时间,mgcv::gamm() 返回的对象只是 "list" 类!

    最简单的方法是为 "gamm" 类的对象和 "gam" 类的对象编写自己的 family 方法(这样您就不必记住要从哪个组件中提取):

    family.gamm <- function(object, ...) {
        family(object$gam)
    }
    
    family.gam <- function(object, ...) {
        object$family
    }
    

    鉴于family.glm 的定义与上面的.gam 方法的定义完全匹配,因此在您的工作区中保留此功能不会干扰mgcv 的其余部分。 p>

    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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2016-12-08
      • 1970-01-01
      • 2015-06-24
      • 2017-03-23
      • 1970-01-01
      相关资源
      最近更新 更多