mnpFit¶
Purpose¶
Estimates the Multinomial Probit (MNP) model using analytic gradients and a variety of analytic approximation methods for the multivariate cumulative normal distribution, supporting mixture-of-normals random coefficients and flexible covariance restrictions.
Format¶
-
beta_hat =
mnpFit(fname, dvunordname, davunordname, ivunord, var_unordnames[, mix, ranvars, mCtl])¶ Parameters: - fname (string) – Name of dataset in CSV format containing the data for estimation.
- dvunordname (string array) – Names of dependent variables indicating chosen alternatives. The number of entries should equal the number of alternatives.
- davunordname (string array) – Names indicating the availability of alternatives.
- ivunord (string matrix) – Independent variable specifications for each alternative (and segment if applicable). Rows correspond to alternatives, columns to variables.
- var_unordnames (string array) – Names of independent variables for output reporting. Must match the number of columns in ivunord.
- mix (scalar) – Optional input. Indicates if random coefficients are included. :0: No random coefficients (default). :1: Random coefficients included.
- ranvars (string array) – Optional input. Names of variables (in var_unordnames) with random coefficients when mix = 1.
- mCtl (struct) –
Optional input. An instance of
mnpControlstructure containing the following members:mCtl.nseg Number of segments. Default = 1. mCtl.mix Indicates random coefficients present. Default = 0. mCtl.randdiag Diagonal restriction on random coefficients covariance. Default = 0. mCtl.want_covariance Computes covariance matrix of estimates. Default = 1. mCtl.IID_first If 1, forces IID kernel as starting values. Default = 0. mCtl.IID Forces IID covariance structures. Default = 0. mCtl.heteronly Controls heteroskedasticity restrictions in differenced covariance. Default = 0. mCtl.spherical Parameterization type for Cholesky decomposition. 1 = spherical, 0 = radial. Default = 0. mCtl.scal Scale matrix for spherical/radial parameterizations. Default = 1. mCtl.seed10 Seed for "SSJ"`method. Default = 70000000 if method is"SSJ".mCtl.perms Permutations for "SSJ"method. Default = 1 if method is"SSJ".mCtl.method Analytic approximation method. Default = "OVUS".
Returns: beta_hat (column vector) – Estimated parameters including fixed coefficients, random coefficients (if applicable), kernel/correlation parameters, and scale parameters.
Remarks¶
Supports a variety of analytic methods for multivariate normal approximation:
Method Description “SSJ” Switzer, Solow, and Joe method “TG” Trinh and Genz’s univariate conditioning “ME” Matrix-based LDLT approach “OVUS” One-variate univariate screening “OVBS” One-variate bivariate screening “TGBME” Trinh and Genz’s bivariate conditioning “BME” Bivariate ME approach “TVBS” Two-variate bivariate screening Uses the
maxlik()framework for maximum likelihood estimation with analytic gradients.Random coefficients (mixture-of-normals) are supported when mix = 1 with variable names specified in ranvars.
Examples¶
Basic usage without random coefficients¶
// Set up the workspace
new;
cls;
// Load the libraries
library bhatlib, maxlik;
// Specify the dataset file
fname = __FILE_DIR $+ "TRAVELMODE.csv";
// Specify the dependent variables alternatives
string dvunordname = { "Alt1_ch" "Alt2_ch" "Alt3_ch" };
// Specify availability restrictions
string davunordname = "none";
// Specify independent variables for each alternative
string ivunord = {
"sero" "sero" "AGE45" "sero" "IVTT_DA" "OVTT_DA" "COST_DA",
"uno" "sero" "sero" "AGE45" "IVTT_SR" "OVTT_SR" "COST_SR",
"sero" "uno" "sero" "sero" "IVTT_TR" "OVTT_TR" "COST_TR"
};
// Specify variable names for output reporting
string var_unordnames = { "CON_SR" "CON_TR" "AGE45_DA" "AGE45_SR" "IVTT" "OVTT" "COST" };
// Estimate the model
beta_hat = mnpFit(fname, dvunordname, davunordname, ivunord, var_unordnames);
Usage with random coefficients¶
// Set up the workspace
new;
cls;
// Load the libraries
library bhatlib, maxlik;
// Specify the dataset file
fname = __FILE_DIR $+ "TRAVELMODE.csv";
// Specify the dependent variables alternatives
string dvunordname = { "Alt1_ch" "Alt2_ch" "Alt3_ch" };
// Specify availability restrictions
string davunordname = "none";
// Specify independent variables for each alternative
string ivunord = {
"sero" "sero" "AGE45" "sero" "IVTT_DA" "OVTT_DA" "COST_DA",
"uno" "sero" "sero" "AGE45" "IVTT_SR" "OVTT_SR" "COST_SR",
"sero" "uno" "sero" "sero" "IVTT_TR" "OVTT_TR" "COST_TR"
};
// Specify variable names for output reporting
string var_unordnames = { "CON_SR" "CON_TR" "AGE45_DA" "AGE45_SR" "IVTT" "OVTT" "COST" };
// Turn on random coefficients
mix = 1;
// Specify random coefficients variables
ranvars = "OVTT";
beta_hat = mnpFit(fname, dvunordname, davunordname, ivunord, var_unordnames, mix, ranvars);
Source¶
bhatlib.src