Page 1 of 1

Low t-ratios in MNL

Posted: 27 Mar 2024, 15:45
by Suppha
Hi, I'm new to choice modelling and using Apollo. I've been working through the Multinomial Logit (MNL) process and have a question regarding the estimation output. When applying it to my work, I noticed that some attributes display t-ratios that are lower than the absolute value of 1.96. What steps should I take when encountering t-ratios below this threshold?

here is my code:

# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #

### Vector of parameters, including any that are kept fixed in estimation
apollo_beta=c(asc_bev = 0,
asc_phev = 0,
asc_ice = 0,
b_price_bev = 0,
b_price_phev = 0,
b_price_ice = 0,
b_range_bev = 0,
b_range_phev = 0,
b_range_ice = 0,
b_time_bev = 0,
b_time_phev = 0,
b_time_ice = 0,
b_petrol = 0,
b_shopping = 0,
b_workplace = 0,
b_density_75 = 0,
b_density_50 = 0,
b_density_25 = 0,
b_home_yes = 0,
b_home_no = 0,
b_convenience = 0,
b_tax = 0,
b_both = 0,
b_none = 0)

### Vector with names (in quotes) of parameters to be kept fixed at their starting value in apollo_beta, use apollo_beta_fixed = c() if none
apollo_fixed = c("asc_ice", "b_petrol", "b_density_25", "b_home_no","b_none")



# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #

apollo_inputs = apollo_validateInputs()



# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #

apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimate"){

### Attach inputs and detach after function exit
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))

### Create list of probabilities P
P = list()

### List of utilities: these must use the same names as in mnl_settings, order is irrelevant
V = list()
V[["bev"]] = asc_bev +
b_price_bev * bev_priceb +
b_range_bev * bev_rangeb +
b_time_bev * bev_ctimeb +
b_petrol * (bev_clocation == 1) + b_shopping * (bev_clocation == 2) + b_workplace * (bev_clocation == 3) +
b_density_25 * (bev_cdensity == 1) + b_density_50 * (bev_cdensity == 2) + b_density_75 * (bev_cdensity == 3) +
b_home_no * (bev_chome == 1) + b_home_yes * (bev_chome == 2) +
b_none * (bev_policy == 1) + b_both * (bev_policy == 2) + b_tax * (bev_policy == 3) + b_convenience * (bev_policy == 4)

V[["phev"]] = asc_phev +
b_price_phev * phev_pricep +
b_range_phev * phev_rangep +
b_time_phev * phev_ctimep +
b_petrol * (phev_clocation == 1) + b_shopping * (phev_clocation == 2) + b_workplace * (phev_clocation == 3) +
b_density_25 * (phev_cdensity == 1) + b_density_50 * (phev_cdensity == 2) + b_density_75 * (phev_cdensity == 3) +
b_home_no * (phev_chome == 1) + b_home_yes * (phev_chome == 2) +
b_none * (phev_policy == 1) + b_both * (phev_policy == 2) + b_tax * (phev_policy == 3) + b_convenience * (phev_policy == 4)

V[["ice"]] = b_price_ice * ice_pricei +
b_range_ice * ice_rangei +
b_time_ice * ice_ctimei

### Define settings for MNL model component
mnl_settings = list(
alternatives = c(bev=1, phev=2, ice=3),

choiceVar = choice,
utilities = V
)

### Compute probabilities using MNL model
P[["model"]] = apollo_mnl(mnl_settings, functionality)

### Take product across observation for same individual
P = apollo_panelProd(P, apollo_inputs, functionality)

### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}

# ################################################################# #
#### MODEL ESTIMATION ####
# ################################################################# #


model_ICE = apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, apollo_inputs)
###############################################################################


Here is the outout:

Estimate s.e. t.rat.(0) p(2-sided) Rob.s.e. Rob.t.rat.(0)
asc_bev -0.815244 0.862403 -0.9453 0.344497 1.028869 -0.7924
asc_phev 0.220193 0.509483 0.4322 0.665604 0.601464 0.3661
asc_ice 0.000000 NA NA NA NA NA
b_price_bev -0.001926 5.5880e-04 -3.4462 5.6851e-04 5.6485e-04 -3.4093
b_price_phev -0.001298 1.6872e-04 -7.6955 1.399e-14 2.1584e-04 -6.0155
b_price_ice -0.001497 1.8154e-04 -8.2480 2.220e-16 2.6112e-04 -5.7341
b_range_bev 0.003958 0.002693 1.4697 0.141651 0.002703 1.4645
b_range_phev 1.6909e-04 3.5711e-04 0.4735 0.635853 3.3829e-04 0.4998
b_range_ice 5.4082e-04 4.7826e-04 1.1308 0.258135 5.6884e-04 0.9508
b_time_bev -0.014269 0.002475 -5.7653 8.151e-09 0.003099 -4.6041
b_time_phev -0.016608 0.011060 -1.5016 0.133195 0.012485 -1.3302
b_time_ice 0.003379 0.016412 0.2059 0.836895 0.020175 0.1675
b_petrol 0.000000 NA NA NA NA NA
b_shopping 0.198299 0.073553 2.6960 0.007018 0.081813 2.4238
b_workplace 0.185014 0.090939 2.0345 0.041903 0.091330 2.0258
b_density_75 0.367555 0.075417 4.8736 1.096e-06 0.086775 4.2357
b_density_50 0.212173 0.072862 2.9120 0.003591 0.085847 2.4715
b_density_25 0.000000 NA NA NA NA NA
b_home_yes 0.462334 0.066733 6.9281 4.264e-12 0.071295 6.4848
b_home_no 0.000000 NA NA NA NA NA
b_convenience 0.596058 0.087141 6.8402 7.910e-12 0.103836 5.7404
b_tax 0.475944 0.097966 4.8583 1.184e-06 0.107076 4.4449
b_both 0.430233 0.085910 5.0080 5.501e-07 0.116713 3.6862
b_none 0.000000 NA NA NA NA NA





Please advise

Re: Low t-ratios in MNL

Posted: 24 Apr 2024, 15:35
by stephanehess
Hi

there could be many reasons for this. Either there really is no effect (in which case that is a finding), or you don't have enough data, or a bad design. But this is a general question, not Apollo related

Stephane