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 mnpControl structure 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