mclogit
fits conditional logit models and mixed conditional
logit models to count data and individual choice data,
where the choice set may vary across choice occasions.
Conditional logit models without random effects are fitted by Fisher-scoring/IWLS. Models with random effects (mixed conditional logit models) are estimated via maximum likelihood with a simple Laplace aproximation (aka PQL).
mclogit(formula, data=parent.frame(), random=NULL,
subset, weights = NULL, offset=NULL, na.action = getOption("na.action"),
model = TRUE, x = FALSE, y = TRUE, contrasts=NULL,
method = NULL, estimator=c("ML","REML"),
dispersion = FALSE,
start=NULL,
control=if(length(random))
mmclogit.control(...)
else mclogit.control(...), ...)# S3 method for mclogit
update(object, formula., dispersion, ...)
# S3 method for mclogit
summary(object, dispersion = NULL, correlation = FALSE,
symbolic.cor = FALSE, ...)
mclogit
returns an object of class "mclogit", which has almost the
same structure as an object of class "glm".
a model formula: a symbolic description of the model to be fitted. The left-hand side should result in a two-column matrix. The first column contains the choice counts or choice indicators (alternative is chosen=1, is not chosen=0). The second column contains unique numbers for each choice set.
The left-hand side can either take the form cbind(choice,set)
or (from version 0.9.1) choice|set
If individual-level data is used, choice sets correspond to individuals, if aggregated data with choice counts are used, choice sets usually correspond to covariate classes.
The right-hand of the formula contains choice predictors. It should be noted that constants are deleted from the formula as are predictors that do not vary within choice sets.
an optional data frame, list or environment (or object
coercible by as.data.frame
to a data frame) containing
the variables in the model. If not found in data
, the
variables are taken from environment(formula)
,
typically the environment from which glm
is called.
an optional formula or list of formulas that specify the random-effects structure or NULL.
an optional vector of weights to be used in the fitting
process. Should be NULL
or a numeric vector.
an optional model offset. Currently only supported for models without random effects.
an optional vector specifying a subset of observations to be used in the fitting process.
a function which indicates what should happen
when the data contain NA
s. The default is set by
the na.action
setting of options
, and is
na.fail
if that is unset. The ‘factory-fresh’
default is na.omit
. Another possible value is
NULL
, no action. Value na.exclude
can be useful.
an optional numerical vector of starting values for the
conditional logit parameters. If the model has random effects, the
vector should have a "VarCov" attribute wtih starting values for the
random effects (co-)variances. If the random effects model is
estimated with the "PQL" method, the starting values matrix should
also have a "random.effects" attribute, which should have the same
structure as the "random.effects" component of an object returned by
mblogit()
.
a logical value indicating whether model frame should be included as a component of the returned value.
logical values indicating whether the response vector and model matrix used in the fitting process should be returned as components of the returned value.
an optional list. See the contrasts.arg
of model.matrix.default
.
NULL
or a character string, either "PQL" or "MQL", specifies
the type of the quasilikelihood approximation to be used if
a random-effects model is to be estimated.
a character string; either "ML" or "REML", specifies which estimator is to be used/approximated.
a real number used as dispersion parameter;
a character vector that specifies the method to compute the dispersion;
a logical value -- if TRUE
the default method
("Afroz"
) is used, if FALSE
, the dispersion parameter
is set to 1, that is, no dispersion. For details see dispersion
.
a list of parameters for the fitting process.
See mclogit.control
arguments to be passed to mclogit.control
or mmclogit.control
an object that inherits class "mclogit"
.
When passed to dispersion()
, it
should be the result of a call of mclogit()
of
mblogit()
, without random effects.
a changes to the model formula,
see update.default
and
update.formula
.
logical; see summary.lm
.
logical; see summary.lm
.
Agresti, Alan (2002). Categorical Data Analysis. 2nd ed, Hoboken, NJ: Wiley. tools:::Rd_expr_doi("10.1002/0471249688")
Breslow, N.E. and D.G. Clayton (1993). "Approximate Inference in Generalized Linear Mixed Models". Journal of the American Statistical Association 88 (421): 9-25. tools:::Rd_expr_doi("10.1080/01621459.1993.10594284")
Elff, Martin (2009). "Social Divisions, Party Positions, and Electoral Behaviour". Electoral Studies 28(2): 297-308. tools:::Rd_expr_doi("10.1016/j.electstud.2009.02.002")
McFadden, D. (1973). "Conditionial Logit Analysis of Qualitative Choice Behavior". Pp. 105-135 in P. Zarembka (ed.). Frontiers in Econometrics. New York: Wiley. https://eml.berkeley.edu/reprints/mcfadden/zarembka.pdf
Conditional logit models are also supported by gmnl, mlogit, and survival. survival supports conditional logit models for binary panel data and case-control studies. mlogit and gmnl treat conditional logit models from an econometric perspective. Unlike the present package, they focus on the random utility interpretation of discrete choice models and support generalisations of conditional logit models, such as nested logit models, that are intended to overcome the IIA (indipendence from irrelevant alterantives) assumption. Mixed multinomial models are also supported and estimated using simulation-based techniques. Unlike the present package, mixed or random-effects extensions are mainly intended to fit repeated choices of the same individuals and not aggregated choices of many individuals facing identical alternatives.
data(Transport)
summary(mclogit(
cbind(resp,suburb)~distance+cost,
data=Transport
))
# New syntactic sugar:
summary(mclogit(
resp|suburb~distance+cost,
data=Transport
))
if (FALSE) # This takes a bit longer.
data(electors)
electors <- within(electors,{
party.time <-interaction(party,time)
time.class <- interaction(time,class)
})
# Time points nested within parties
summary(mclogit(
Freq|time.class~econ.left/class+welfare/class+auth/class,
random=~1|party/time,
data=electors))
# Party-level random intercepts and random slopes varying over time points
summary(mclogit(
Freq|time.class~econ.left/class+welfare/class+auth/class,
random=list(~1|party,~econ.left+0|time),
data=electors))
Run the code above in your browser using DataLab