gmnl {gmnl} | R Documentation |
Estimate Multinomial Logit Models with Observed and Unobserved Individual Heterogeneity.
Description
Estimate different types of multinomial logit models with observed and unobserved individual heterogneity, such as MIXL, S-MNL, G-MNL, LC and MM-MNL models. These models are estimated using Maximum Simulated Likelihood. It supports both cross-sectional and panel data.
Usage
gmnl(
formula,
data,
subset,
weights,
na.action,
model = c("mnl", "mixl", "smnl", "gmnl", "lc", "mm"),
start = NULL,
ranp = NULL,
R = 40,
Q = 2,
haltons = NA,
mvar = NULL,
seed = 12345,
correlation = FALSE,
bound.err = 2,
panel = FALSE,
hgamma = c("direct", "indirect"),
reflevel = NULL,
init.tau = 0.1,
init.gamma = 0.1,
notscale = NULL,
print.init = FALSE,
gradient = TRUE,
typeR = TRUE,
...
)
## S3 method for class 'gmnl'
print(
x,
digits = max(3, getOption("digits") - 3),
width = getOption("width"),
...
)
## S3 method for class 'gmnl'
summary(object, ...)
## S3 method for class 'summary.gmnl'
print(
x,
digits = max(3, getOption("digits") - 2),
width = getOption("width"),
...
)
## S3 method for class 'gmnl'
update(object, new, ...)
## S3 method for class 'gmnl'
coef(object, ...)
## S3 method for class 'gmnl'
model.matrix(object, ...)
## S3 method for class 'gmnl'
residuals(object, outcome = TRUE, ...)
## S3 method for class 'gmnl'
df.residual(object, ...)
## S3 method for class 'gmnl'
fitted(object, outcome = TRUE, ...)
## S3 method for class 'gmnl'
logLik(object, ...)
## S3 method for class 'gmnl'
nObs(x, ...)
Arguments
formula |
a symbolic description of the model to be estimated. The formula is divided in five parts, each of them separated by the symbol |
data |
the data of class |
subset |
an optional vector specifying a subset of observations. |
weights |
an optional vector of weights. Default to 1. |
na.action |
a function wich indicated what should happen when the data
contains |
model |
a string indicating which model is estimated. The options are " |
start |
a vector of starting values. |
ranp |
a named vector whose names are the random parameters and values the distribution:
" |
R |
the number of draws of pseudo-random numbers if |
Q |
number of classes for LC or MM-MNL models. |
haltons |
only relevant if |
mvar |
only valid if |
seed |
seed for the random number generator. Default is |
correlation |
only relevant if |
bound.err |
only relevenat if model is |
panel |
if |
hgamma |
a string indicated how to estimate the parameter gamma. If " |
reflevel |
the base alternative. |
init.tau |
initial value for the |
init.gamma |
initial value for |
notscale |
only relevant if model is |
print.init |
if |
gradient |
if |
typeR |
if |
... |
additional arguments to be passed to |
x , object |
and object of class |
digits |
the number of digits. |
width |
width. |
new |
an updated formula for the |
outcome |
if |
Details
Let the utility to person from choosing alternative
on choice occasion
be:
where is i.i.d extreme value, and
vary across individuals. Each model estimated by
gmnl
depends on how is specified. The options are the following:
S-MNL if
, where the scale
varies across individuals.
MIXL if
, where
is a draw from some distribution. For example, if
, then
.
GMNL if
, where
is the scale parameter, and
is a parameter that controls how the variance of residual taste heterogeneity varies with scale.
LC if
with probability
for
, where
is the total number of classes.
MM-MIXL if
with probability
for
, where
is the total number of classes.
Observed heterogeneity can be also accommodated in the random parameters when the MIXL is estimated by including individual-specific covariates. Specifically, the vector of random coefficients is
where is a set of characteristics of individual
that influence the mean of the taste parameters; and
is matrix of parameters. To estimate this model, the fourth part of the
formula
should be specified along with the mvar
argument.
One can also allow the mean of the scale to differ across individuals by including individual-specific characteristics. Thus, the scale parameters can be written as
where is a vector of attributes of individual
. To estimate this model, the fifth part of the
formula
should include the variables that enter .
For models with latent classes, the class assignment is modeled as a semi-parametric multinomial logit format
for . Latent class models (LC and MM-MIXL) requires at least that a constant should be specified in the fifth part of the
formula
. If the class assignment, , is also determined by socio-economic characteristics, these variables can be also included in the fifth part.
Models that involve random parameters are estimated using Maximum Simulated Likelihood using the maxLik
function of maxLik
package.
Value
An object of class “gmnl
” with the following elements
coefficients |
the named vector of coefficients, |
logLik |
a set of values of the maximum likelihood procedure, |
mf |
the model framed used, |
formula |
the formula (a |
time |
|
freq |
frequency of dependent variable, |
draws |
type of draws used, |
model |
the fitted model, |
R |
number of draws used, |
ranp |
vector indicating the variables with random parameters and their distribution, |
residuals |
the residuals, |
correlation |
whether the model is fitted assuming that the random parameters are correlated, |
bi |
matrix of conditional expectation of random parameters, |
Q |
number of classes, |
call |
the matched call. |
Author(s)
Mauricio Sarrias msarrias86@gmail.com
References
Keane, M., & Wasi, N. (2013). Comparing alternative models of heterogeneity in consumer choice behavior. Journal of Applied Econometrics, 28(6), 1018-1045.
Fiebig, D. G., Keane, M. P., Louviere, J., & Wasi, N. (2010). The generalized multinomial logit model: accounting for scale and coefficient heterogeneity. Marketing Science, 29(3), 393-421.
Greene, W. H., & Hensher, D. A. (2010). Does scale heterogeneity across individuals matter? An empirical assessment of alternative logit models. Transportation, 37(3), 413-428.
Train, K. (2009). Discrete choice methods with simulation. Cambridge University Press.
See Also
mlogit
, mlogit.data
, maxLik
, Rchoice
Examples
## Examples using the Fishing data set from the AER package
data("TravelMode", package = "AER")
library(mlogit)
TM <- mlogit.data(TravelMode, choice = "choice", shape = "long",
alt.levels = c("air", "train", "bus", "car"), chid.var = "individual")
## Not run:
## S-MNL model, ASCs not scaled
smnl <- gmnl(choice ~ wait + vcost + travel + gcost| 1, data = TM,
model = "smnl", R = 100,
notscale = c(1, 1, 1, rep(0, 4)))
summary(smnl)
## MIXL model with observed heterogeneity
mixl.hier <- gmnl(choice ~ vcost + gcost + travel + wait | 1 | 0 | income + size - 1,
data = TM,
model = "mixl",
ranp = c(travel = "t", wait = "n"),
mvar = list(travel = c("income","size"), wait = c("income")),
R = 30,
haltons = list("primes"= c(2, 17), "drop" = rep(19, 2)))
summary(mixl.hier)
## Examples using the Electricity data set from the mlogit package
data("Electricity", package = "mlogit")
Electr <- mlogit.data(Electricity, id.var = "id", choice = "choice",
varying = 3:26, shape = "wide", sep = "")
## Estimate a MIXL model with correlated random parameters
Elec.cor <- gmnl(choice ~ pf + cl + loc + wk + tod + seas| 0, data = Electr,
subset = 1:3000,
model = 'mixl',
R = 10,
panel = TRUE,
ranp = c(cl = "n", loc = "n", wk = "n", tod = "n", seas = "n"),
correlation = TRUE)
summary(Elec.cor)
cov.gmnl(Elec.cor)
se.cov.gmnl(Elec.cor)
se.cov.gmnl(Elec.cor, sd = TRUE)
cor.gmnl(Elec.cor)
## Estimate a G-MNL model, where ASCs are also random
Electr$asc2 <- as.numeric(Electr$alt == 2)
Electr$asc3 <- as.numeric(Electr$alt == 3)
Electr$asc4 <- as.numeric(Electr$alt == 4)
Elec.gmnl <- gmnl(choice ~ pf + cl + loc + wk + tod + seas + asc2 + asc3 + asc4 | 0,
data = Electr,
subset = 1:3000,
model = 'gmnl',
R = 30,
panel = TRUE,
notscale = c(rep(0, 6), 1, 1, 1),
ranp = c(cl = "n", loc = "n", wk = "n", tod = "n", seas = "n",
asc2 = "n", asc3 = "n", asc4 = "n"))
summary(Elec.gmnl)
## Estimate a LC model with 2 classes
Elec.lc <- gmnl(choice ~ pf + cl + loc + wk + tod + seas| 0 | 0 | 0 | 1,
data = Electr,
subset = 1:3000,
model = 'lc',
panel = TRUE,
Q = 2)
summary(Elec.lc)
## Estimate a MM-MIXL model
Elec.mm <- gmnl(choice ~ pf + cl + loc + wk + tod + seas| 0 | 0 | 0 | 1,
data = Electr,
subset = 1:3000,
model = 'mm',
R = 30,
panel = TRUE,
ranp = c(pf = "n", cl = "n", loc = "n", wk = "n", tod = "n",
seas = "n"),
Q = 2,
iterlim = 500)
summary(Elec.mm)
## End(Not run)