从 glm 中提取偏移项

Extract offset term from glm

我想知道如何从以下模型中提取偏移项:

mod <- glm(cyl ~ mpg + disp + offset(log(gear)), family = "poisson", data = mtcars)

我想编写一个函数 get_offset(),其中 return 是偏移项:

get_offset <- function(x){
  ...
}

get_offset(mod)
#> "log(gear)"

get_offset() 还应 return 模型的偏移项:

mod2 <- glm(cyl ~ mpg + disp, offset = log(gear), family = "poisson", data = mtcars)
mod3 <- glm(cyl ~ mpg + offset(log(gear)) + disp, family = "poisson", data = mtcars)
mod4 <- glm(cyl ~ mpg + offset(gear) + disp, family = "poisson", data = mtcars)

给予:

get_offset(mod2)
#> "log(gear)"

get_offset(mod3)
#> "log(gear)"

get_offset(mod4)
#> "gear"

reprex package (v0.3.0)

于 2021 年 1 月 2 日创建

我们可以从 terms

中获取属性
get_offset <- function(model) {
     nm1 <- names(attributes(model$terms)$dataClasses)
      if('(offset)' %in% nm1) {
             deparse(as.list(model$call)$offset)
        } else {

      sub("offset\((.*)\)$", "\1", grep('offset', nm1, value = TRUE))
     }
   }

get_offset(mod)
#[1] "log(gear)"
get_offset(mod2)
#[1] "log(gear)"
get_offset(mod3)
#[1] "log(gear)"
get_offset(mod4)
#[1] "gear"