margeff {VGAM}R Documentation

Marginal effects for the multinomial logit and cumulative models

Description

Marginal effects for the multinomial logit model and cumulative logit/probit/... models: the derivative of the fitted probabilities with respect to each explanatory variable.

Usage

margeff(object, subset = NULL)

Arguments

object

A vglm multinomial or cumulative object.

subset

Numerical or logical vector, denoting the required observation(s). Recycling is used if possible. The default means all observations.

Details

Computes the derivative of the fitted probabilities of a multinomial logit model or cumulative logit/probit/... model with respect to each explanatory variable.

Value

A p by M+1 by n array, where p is the number of explanatory variables and the (hopefully) nominal response has M+1 levels, and there are n observations.

If is.numeric(subset) and length(subset) == 1 then a p by M+1 matrix is returned.

Warning

Care is needed in interpretation, e.g., the change is not universally accurate for a unit change in each explanatory variable because eventually the ‘new’ probabilities may become negative or greater than unity. Also, the ‘new’ probabilities will not sum to one.

This function is not applicable for models with data-dependent terms such as bs and poly. Also the function should not be applied to models with any terms that have generated more than one column of the LM model matrix, such as bs and poly. For such try using numerical methods such as finite-differences. The formula in object should comprise of simple terms of the form ~ x2 + x3 + x4, etc.

Note

For multinomial this function should handle any value of refLevel and also any constraint matrices. However, it does not currently handle the xij or form2 arguments, nor vgam objects.

For multinomial if subset is numeric then the function uses a for loop over the observations (slow). The default computations use vectorization; this uses more memory than a for loop but is faster.

Author(s)

T. W. Yee

See Also

multinomial, cumulative, vglm.

Examples

# Not a good example for multinomial() because the response is ordinal!!
ii = 3; hh = 1/100
pneumo = transform(pneumo, let = log(exposure.time))
fit = vglm(cbind(normal, mild, severe) ~ let, multinomial, pneumo)
fit = vglm(cbind(normal, mild, severe) ~ let,
           cumulative(reverse = TRUE,  parallel = TRUE),
           data = pneumo)
fitted(fit)[ii,]

mynewdata = with(pneumo, data.frame(let = let[ii]+hh))
(newp <- predict(fit, newdata = mynewdata, type = "response"))

# Compare the difference. Should be the same as hh --> 0.
round(dig = 3, (newp-fitted(fit)[ii,])/hh) # Finite-difference approximation
round(dig = 3, margeff(fit, subset = ii)["let",])

# Other examples
round(dig = 3, margeff(fit))
round(dig = 3, margeff(fit, subset = 2)["let",])
round(dig = 3, margeff(fit, subset = c(FALSE,TRUE))["let",,]) # recycling
round(dig = 3, margeff(fit, subset = c(2,4,6,8))["let",,])

[Package VGAM version 0.8-4 Index]