Several functions to retrieve information from model objects, like variable names, link-inverse function, model frame, model family etc., in a tidy and consistent way.

link_inverse(x, multi.resp = FALSE, mv = FALSE)

model_family(x, multi.resp = FALSE, mv = FALSE)

model_frame(x, fe.only = TRUE)

pred_vars(x, ...)

# S3 method for default
pred_vars(x, fe.only = FALSE, ...)

# S3 method for glmmTMB
pred_vars(x, fe.only = FALSE, zi = FALSE,
  disp = FALSE, ...)

# S3 method for MixMod
pred_vars(x, fe.only = FALSE, zi = FALSE, ...)

re_grp_var(x)

grp_var(x)

resp_val(x)

resp_var(x, combine = TRUE)

var_names(x)

Arguments

x

A fitted model; for var_names(), x may also be a character vector.

mv, multi.resp

Logical, if TRUE and model is a multivariate response model from a brmsfit object or of class stanmvreg, then a list of values (one for each regression) is returned.

fe.only

Logical, if TRUE and x is a mixed effects model, model_frame() returns the model frame for fixed effects only, and pred_vars() returns only fixed effects terms. Note that the default for model_frame() is fe.only = TRUE, while for pred_vars() the default is fe.only = FALSE.

...

Currently not used.

zi

Logical, if TRUE and model has a zero-inflation-formula, the variable(s) used in this formula are also returned.

disp

Logical, if TRUE and model is of class glmmTMB and has a dispersion-formula, the variable(s) used in the dispersion-formula are also returned.

combine

Logical, if TRUE and the response is a matrix-column, the name of the response matches the notation in formula, and would for instance also contain patterns like "cbind(...)". Else, the original variable names from the matrix-column are returned. See 'Examples'.

Value

For pred_vars() and resp_var(), the name(s) of the response or predictor variables from x as character vector. resp_val() returns the values from x's response vector. re_grp_var() returns the group factor of random effects in mixed models, or NULL if x has no such random effects term (grp_var() is an alias for re_grp_var()).

link_inverse() returns, if known, the inverse link function from x; else NULL for those models where the inverse link function can't be identified.

model_frame() is similar to model.frame(), but should also work for model objects that don't have a S3-generic for model.frame().

var_names() returns the "cleaned" variable names, i.e. things like s() for splines or log() are removed.

model_family() returns a list with information about the model family (see 'Details').

Details

model_family() returns a list with information about the model family for many different model objects. Following information is returned, where all values starting with is_ are logicals.

  • is_bin: family is binomial (but not negative binomial)

  • is_pois: family is either poisson or negative binomial

  • is_negbin: family is negative binomial

  • is_count: model is a count model (i.e. family is either poisson or negative binomial)

  • is_beta: family is beta

  • is_logit: model has logit link

  • is_linear: family is gaussian

  • is_ordinal: family is ordinal or cumulative link

  • is_categorical: family is categorical link

  • is_zeroinf: model has zero-inflation component

  • is_multivariate: model is a multivariate response model (currently only works for brmsfit objects)

  • is_trial: model response contains additional information about the trials

  • link.fun: the link-function

  • family: the family-object

model_frame() slighty differs from model.frame(), especially for spline terms and matrix-variables created with cbind() (for example in binomial models, where the response is a combination of successes and trials) . Where model.frame() returns a matrix for splines, model_frame() returns the data of the original variable and uses the same column name as in the data-argument from the model-function. This makes it easier, for instance, to get data that should be used as new data in predict(). For matrix-variables created with cbind(), model_frame() returns the original variable as matrix and additionally each column as own variable. See 'Examples'.

Examples

data(efc) fit <- lm(neg_c_7 ~ e42dep + c161sex, data = efc) pred_vars(fit)
#> [1] "e42dep" "c161sex"
resp_var(fit)
#> [1] "neg_c_7"
resp_val(fit)
#> [1] 12 20 11 10 12 19 15 11 15 10 28 18 13 18 16 13 11 11 13 17 11 9 8 14 11 #> [26] 23 11 15 11 25 9 15 20 9 10 19 8 17 16 17 14 14 16 19 17 15 16 19 17 10 #> [51] 14 14 9 12 25 17 22 13 15 7 19 11 15 13 11 14 17 7 15 11 19 10 10 20 10 #> [76] 12 15 7 13 12 16 10 15 15 15 25 11 10 11 14 10 10 13 10 11 18 14 12 10 9 #> [101] 13 14 10 10 13 13 12 12 18 7 13 14 11 16 15 15 9 17 17 22 16 14 9 13 9 #> [126] 17 17 9 13 14 12 18 7 10 12 20 12 14 12 10 12 11 14 11 13 10 12 12 10 9 #> [151] 15 12 11 14 16 18 11 11 14 14 12 10 9 12 8 10 11 10 11 13 7 10 11 12 15 #> [176] 10 16 13 20 7 12 17 14 10 12 9 7 16 13 14 8 8 20 7 15 7 9 14 11 12 #> [201] 11 12 18 8 13 16 8 13 14 11 8 12 24 11 11 13 9 13 20 12 16 15 20 10 12 #> [226] 12 12 11 10 9 10 8 10 12 10 9 11 7 9 11 11 12 11 14 12 12 19 12 15 11 #> [251] 17 8 13 11 10 8 10 19 10 18 8 11 9 10 13 11 9 9 8 9 8 8 11 9 10 #> [276] 12 9 17 20 12 7 9 7 8 8 14 7 10 8 16 9 16 13 8 20 16 9 9 8 15 #> [301] 16 19 8 12 17 12 14 11 9 11 9 8 10 8 10 15 13 8 10 10 12 14 12 7 8 #> [326] 16 9 16 7 8 13 9 7 9 9 8 17 7 8 9 7 10 10 11 18 9 10 13 8 12 #> [351] 9 7 10 8 7 7 12 12 9 8 10 18 16 11 15 10 9 9 12 18 12 13 17 9 8 #> [376] 7 16 12 14 15 10 9 17 17 21 17 17 15 9 12 12 22 11 14 11 9 8 12 13 13 #> [401] 9 10 12 9 11 13 11 17 10 18 10 16 10 10 14 11 11 10 11 8 15 12 10 13 13 #> [426] 13 12 9 13 10 15 18 11 14 11 12 12 14 15 8 10 9 7 8 18 7 7 7 11 8 #> [451] 11 11 16 13 14 14 7 9 7 17 7 10 9 9 7 12 14 7 10 20 7 8 9 11 10 #> [476] 14 7 8 8 10 8 12 10 14 11 8 11 17 10 22 8 9 19 11 18 16 18 15 19 10 #> [501] 13 15 7 8 22 8 20 19 10 7 25 9 11 7 11 9 8 12 9 20 7 12 9 9 8 #> [526] 10 8 17 12 9 9 8 7 8 9 17 17 8 9 9 10 9 7 8 27 25 14 28 16 11 #> [551] 15 7 9 7 7 8 13 19 15 14 20 20 14 10 11 15 7 14 11 13 16 13 10 17 10 #> [576] 12 11 7 8 15 13 11 7 18 17 12 18 17 13 10 19 7 8 10 18 17 19 8 12 10 #> [601] 14 10 13 9 8 8 9 15 11 7 8 11 21 8 11 10 10 11 10 11 9 13 17 9 8 #> [626] 8 9 13 14 14 9 12 8 11 10 11 11 10 10 10 12 13 7 8 12 8 8 13 10 12 #> [651] 16 8 10 13 10 9 10 12 11 9 10 9 13 10 9 10 8 7 8 7 7 9 8 11 9 #> [676] 10 12 11 7 16 12 10 8 12 23 10 10 18 13 12 18 9 12 13 9 7 10 7 8 17 #> [701] 11 14 11 23 14 8 7 15 8 12 9 15 17 13 13 10 20 10 11 25 10 12 10 12 10 #> [726] 8 14 8 18 8 15 11 12 10 7 10 13 14 7 7 14 11 11 11 9 7 15 9 9 18 #> [751] 8 15 7 8 13 8 8 9 7 7 9 8 8 13 10 11 13 11 8 12 8 9 16 11 19 #> [776] 12 12 9 10 10 9 13 7 11 13 10 10 13 9 14 15 15 9 10 8 8 9 9 9 9 #> [801] 9 13 9 12 14 12 8 10 7 22 18 16 13 15 24 11 14 12 11 10 7 10 10 12 10 #> [826] 7 9 16 14 12 9 10 8 9 7 8 10 9 8 10 10 7 11 8 10 11 14 7 8 10 #> [851] 10 11 11 8 8 9 11 7 7 8 9 9 7 13 15 11 24 8 9 7 10 15 18 22 18 #> [876] 9 11 14 7 9 17 23 12 13 15 8 8 14 10 10 #> attr(,"label") #> [1] "Negative impact with 7 items"
link_inverse(fit)(2.3)
#> [1] 2.3
# example from ?stats::glm counts <- c(18, 17, 15, 20, 10, 20, 25, 13, 12) outcome <- gl(3, 1, 9) treatment <- gl(3, 3) m <- glm(counts ~ outcome + treatment, family = poisson()) link_inverse(m)(.3)
#> [1] 1.349859
# same as exp(.3)
#> [1] 1.349859
outcome <- as.numeric(outcome) m <- glm(counts ~ log(outcome) + as.factor(treatment), family = poisson()) var_names(m)
#> [1] "counts" "outcome" "treatment"
# model.frame and model_frame behave slightly different library(splines) m <- lm(neg_c_7 ~ e42dep + ns(c160age, knots = 2), data = efc) head(model.frame(m))
#> neg_c_7 e42dep ns(c160age, knots = 2).1 ns(c160age, knots = 2).2 #> 1 12 3 0.49465270 0.08689310 #> 2 20 3 0.49766116 0.04922034 #> 3 11 3 0.45855117 0.53896628 #> 4 10 4 0.47509770 0.33176607 #> 5 12 4 0.50819077 -0.08263434 #> 6 19 4 0.49465270 0.08689310
head(model_frame(m))
#> neg_c_7 e42dep c160age #> 1 12 3 56 #> 2 20 3 54 #> 3 11 3 80 #> 4 10 4 69 #> 5 12 4 47 #> 6 19 4 56
library(lme4) data(cbpp) cbpp$trials <- cbpp$size - cbpp$incidence m <- glm(cbind(incidence, trials) ~ period, data = cbpp, family = binomial) head(model.frame(m))
#> cbind(incidence, trials).incidence cbind(incidence, trials).trials period #> 1 2 12 1 #> 2 3 9 2 #> 3 4 5 3 #> 4 0 5 4 #> 5 3 19 1 #> 6 1 17 2
head(model_frame(m))
#> cbind(incidence, trials).incidence cbind(incidence, trials).trials period #> 1 2 12 1 #> 2 3 9 2 #> 3 4 5 3 #> 4 0 5 4 #> 5 3 19 1 #> 6 1 17 2 #> incidence trials #> 1 2 12 #> 2 3 9 #> 3 4 5 #> 4 0 5 #> 5 3 19 #> 6 1 17
resp_var(m, combine = TRUE)
#> [1] "cbind(incidence, trials)"
resp_var(m, combine = FALSE)
#> [1] "incidence" "trials"
# get random effects grouping factor from mixed models library(lme4) data(sleepstudy) m <- lmer(Reaction ~ Days + (1 + Days | Subject), data = sleepstudy) re_grp_var(m)
#> [1] "Subject"
# get model predictors, with and w/o dispersion formula
# NOT RUN { library(glmmTMB) data("Salamanders") m <- glmmTMB( count ~ spp + cover + mined + poly(DOP, 3) + (1 | site), ziformula = ~spp + mined, dispformula = ~DOY, data = Salamanders, family = nbinom2 ) pred_vars(m) pred_vars(m, fe.only = TRUE) pred_vars(m, disp = TRUE) # }