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. 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. 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. Logical, if TRUE and model has a zero-inflation-formula, the variable(s) used in this formula are also returned. 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. 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"
# 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.08689310head(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      2head(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)
# }