Differences in Estimates in WTP space and preference space
Posted: 07 Dec 2023, 06:35
Dear Stephane,
Thank you for Apollo.
I'm wondering why there is a significant difference in model estimates in WTP space with those in Preference space.
I can not figure out the cause of this difference.
Model 3 (MMNL-WTP) results are very different from Model 1 (MNL) and Model 2(MMNL-Preference)
I would highly appreciate if you could take a look and advise what would cause this and how to fix it.
Thank you very much in advance.
Edgar
CODES
Model 1- MNL IN PREFENCE SPACE
### Set core controls
apollo_control = list(
modelName ="MNL in Preference space-Model",
modelDescr ="Simple MNL model on mode choice SP data",
indivID ="ID"
)
# ####################################################### #
#### 2. Data loading ####
# ####################################################### #
database = read.csv("C:\\Users\\EDGAR/Desktop\\PilotDatas1.csv",header=TRUE)
### Use only SP data
# ####################################################### #
#### 3. Parameter definition ####
# ####################################################### #
### Vector of parameters, including any that are kept fixed
### during estimation
apollo_beta=c(asc_road = 0,
asc_mgr = 0,
asc_sgr = 0,
b_tt = 0,
b_c = 0,
b_rl=0,
b_ra=0
)
### Vector with names (in quotes) of parameters to be
### kept fixed at their starting value in apollo_beta.
### Use apollo_beta_fixed = c() for no fixed parameters.
apollo_fixed = c("asc_road")
# ####################################################### #
#### 4. Input validation ####
# ####################################################### #
apollo_inputs = apollo_validateInputs()
# ####################################################### #
#### 5. Likelihood definition ####
# ####################################################### #
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[['road']] = asc_road + b_tt*time_road + b_c*cost_road + b_rl*rel_road
V[['mgr']] = asc_mgr + b_tt*time_mgr + b_c*cost_mgr + b_rl*rel_mgr + b_ra*ra_mgr
V[['sgr']] = asc_sgr + b_tt*time_sgr + b_c*cost_sgr+ b_rl*rel_sgr + b_ra* ra_sgr
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(road=1, mgr=2, sgr=3),
choiceVar = choice,
V = V
)
### Compute probabilities using MNL model
P[['model']] = apollo_mnl(mnl_settings, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
# ####################################################### #
#### 6. Model estimation and reporting ####
# ####################################################### #
model = apollo_estimate(apollo_beta, apollo_fixed,
apollo_probabilities,
apollo_inputs,
list(writeIter=FALSE))
apollo_modelOutput(model)
apollo_modelOutput(model, modelOutput_settings = list(printPVal=1)) # for one sided t-test
apollo_modelOutput(model, modelOutput_settings = list(printPVal=2)) # for two sided t-test
apollo_saveOutput(model, saveOutput_settings = list(printPVal=1)) # for one sided t-test
apollo_saveOutput(model, saveOutput_settings = list(printPVal=2)) # for two sided t-test
?apollo_modelOutput # for more details
#apollo_saveOutput(model)
apollo_saveOutput(model)
# ####################################################### #
#### 7. Postprocessing of results ####
# ####################################################### #
apollo_saveOutput(model, saveOutput_settings = NA)
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model,
apollo_probabilities,
apollo_inputs)
######apollo_combineResults()
apollo_sink()
apollo_sink()
Model 1 Results
Model name : MNL
Model description : Simple MNL model on mode choice SP data
Model run at : 2023-12-07 08:54:29.888698
Estimation method : bgw
Model diagnosis : Relative function convergence
Optimisation diagnosis : Maximum found
hessian properties : Negative definite
maximum eigenvalue : -1.177771
reciprocal of condition number : 6.62314e-09
Number of individuals : 1260
Number of rows in database : 1260
Number of modelled outcomes : 1260
Number of cores used : 1
Model without mixing
LL(start) : -1384.25
LL at equal shares, LL(0) : -1384.25
LL at observed shares, LL(C) : -1233.12
LL(final) : -823.74
Rho-squared vs equal shares : 0.4049
Adj.Rho-squared vs equal shares : 0.4006
Rho-squared vs observed shares : 0.332
Adj.Rho-squared vs observed shares : 0.3287
AIC : 1659.48
BIC : 1690.32
Estimated parameters : 6
Time taken (hh:mm:ss) : 00:00:1.1
pre-estimation : 00:00:0.61
estimation : 00:00:0.23
initial estimation : 00:00:0.19
estimation after rescaling : 00:00:0.04
post-estimation : 00:00:0.27
Iterations : 11
initial estimation : 10
estimation after rescaling : 1
Unconstrained optimisation.
Estimates:
Estimate s.e. t.rat.(0) p(2-sided) Rob.s.e. Rob.t.rat.(0) p(2-sided)
asc_road 0.000000 NA NA NA NA NA NA
asc_mgr -1.637799 0.72166 -2.269 0.023239 0.76617 -2.138 0.032546
asc_sgr -1.771418 0.59219 -2.991 0.002778 0.61441 -2.883 0.003938
b_tt -0.372319 0.06859 -5.428 5.702e-08 0.07520 -4.951 7.378e-07
b_c -0.001906 1.9895e-04 -9.583 0.000000 2.0424e-04 -9.334 0.000000
b_rl 0.047630 0.02022 2.356 0.018470 0.02082 2.288 0.022166
b_ra 1.334855 0.13954 9.566 0.000000 0.16399 8.140 4.441e-16
> apollo_saveOutput(model, saveOutput_settings = list(printPVal=1)) # for one sided t-test
Model 2 - MMNL-Lognormal preference space
# ####################################################### #
#### 1. Definition of core settings
# ####################################################### #
### Clear memory
rm(list = ls())
### Load libraries
library(apollo)
### Initialise code
apollo_initialise()
### Set core controls
apollo_control = list(
modelName ="MMNL in Preference Space",
modelDescr ="Mixed logit model on mode choice SP data",
indivID ="ID",
nCores = 4,
outputDirectory = "output"
)
# ####################################################### #
#### 2. Data loading ####
# ####################################################### #
database = read.csv("C:\\Users\\EDGAR/Desktop\\PilotDatas1.csv",header=TRUE)
# ####################################################### #
#### 3. Parameter definition ####
# ####################################################### #
### Vector of parameters, including any that are kept fixed
### during estimation
apollo_beta = c(asc_road = 0,
asc_mgr =-1.64,
asc_sgr = -1.77,
mu_b_tt = -5,
sigma_b_tt = 0,
mu_b_c = -5,
sigma_b_c = 0,
b_rl=0.05,
b_ra=1.3349
)
### Vector with names (in quotes) of parameters to be
### kept fixed at their starting value in apollo_beta.
### Use apollo_beta_fixed = c() for no fixed parameters.
apollo_fixed = c("asc_road")
### Set parameters for generating draws
apollo_draws = list(
interDrawsType = "halton",
interNDraws = 500,
interUnifDraws = c(),
interNormDraws = c("draws_tt","draws_c"),
intraDrawsType = "halton",
intraNDraws = 0,
intraUnifDraws = c(),
intraNormDraws = c()
)
### Create random parameters
apollo_randCoeff = function(apollo_beta, apollo_inputs){
randcoeff = list()
randcoeff[["b_tt"]] = -exp( mu_b_tt + sigma_b_tt * draws_tt )
randcoeff[["b_c"]] = -exp( mu_b_c + sigma_b_c * draws_c )
return(randcoeff)
}
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimate"){
### Function initialization: do not change the following three commands
### 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[['road']] = asc_road + b_tt*time_road + b_c*cost_road + b_rl*rel_road
V[['mgr']] = asc_mgr + b_tt*time_mgr + b_c*cost_mgr + b_rl*rel_mgr + b_ra*ra_mgr
V[['sgr']] = asc_sgr + b_tt*time_sgr + b_c*cost_sgr+ b_rl*rel_sgr + b_ra* ra_sgr
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(road=1, mgr=2, sgr=3),
choiceVar = choice,
V = V
)
### Compute probabilities using MNL model
P[["model"]] = apollo_mnl(mnl_settings, functionality)
### Take product across observation for same individual
### Average across inter-individual draws
P = apollo_avgInterDraws(P, apollo_inputs, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
# ################################################################# #
#### MODEL ESTIMATION ####
# ################################################################# #
model = apollo_estimate(apollo_beta, apollo_fixed,
apollo_probabilities, apollo_inputs)
deltaMethod_settings <- list(operation="lognormal", parName1="mu_b_c", parName2="sigma_b_c")
apollo_deltaMethod(model, deltaMethod_settings)
deltaMethod_settings <- list(operation="lognormal", parName1="mu_b_tt", parName2="sigma_b_tt")
apollo_deltaMethod(model, deltaMethod_settings)
# ################################################################# #
#### MODEL OUTPUTS ####
# ################################################################# #
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO SCREEN) ----
# ----------------------------------------------------------------- #
apollo_modelOutput(model)
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO FILE, using model name) ----
# ----------------------------------------------------------------- #
apollo_saveOutput(model)
#### 7. Postprocessing of results ####
# ####################################################### #
apollo_saveOutput(model, saveOutput_settings = NA)
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model,
apollo_probabilities,
apollo_inputs)
apollo_combineResults(combineResults_settings= NULL)
apollo_sink()
apollo_sink()
Model 2 Results
Model name : MMNL in Preference Space
Model description : Mixed logit model on mode choice SP data
Model run at : 2023-12-07 08:59:43.5022
Estimation method : bgw
Model diagnosis : Relative function convergence
Optimisation diagnosis : Maximum found
hessian properties : Negative definite
maximum eigenvalue : -0.946184
reciprocal of condition number : 7.85808e-06
Number of individuals : 1260
Number of rows in database : 1260
Number of modelled outcomes : 1260
Number of cores used : 4
Number of inter-individual draws : 500 (halton)
WARNING: Inter-individual draws were used
without a panel data structure.
LL(start) : -4129.49
LL at equal shares, LL(0) : -1384.25
LL at observed shares, LL(C) : -1233.12
LL(final) : -818.54
Rho-squared vs equal shares : 0.4087
Adj.Rho-squared vs equal shares : 0.4029
Rho-squared vs observed shares : 0.3362
Adj.Rho-squared vs observed shares : 0.3313
AIC : 1653.08
BIC : 1694.19
Estimated parameters : 8
Time taken (hh:mm:ss) : 00:02:17.3
pre-estimation : 00:00:39.12
estimation : 00:00:30.62
initial estimation : 00:00:28.04
estimation after rescaling : 00:00:2.58
post-estimation : 00:01:7.56
Iterations : 20
initial estimation : 19
estimation after rescaling : 1
Unconstrained optimisation.
Estimates:
Estimate s.e. t.rat.(0) Rob.s.e. Rob.t.rat.(0)
asc_road 0.000000 NA NA NA NA
asc_mgr -1.617589 0.79049 -2.04631 0.843905 -1.9168
asc_sgr -2.254413 0.66557 -3.38721 0.678504 -3.3226
mu_b_tt -0.797232 0.17584 -4.53374 0.193030 -4.1301
sigma_b_tt 0.006742 0.15969 0.04222 0.008151 0.8272
mu_b_c -6.270572 0.12424 -50.47250 0.126086 -49.7324
sigma_b_c 0.495354 0.09304 5.32406 0.090055 5.5006
b_rl 0.056884 0.02263 2.51318 0.023136 2.4586
b_ra 1.528099 0.16308 9.37011 0.186279 8.2033
>
> # ----------------------------------------------------------------- #
> #---- FORMATTED OUTPUT (TO FILE, using model name) ----
> # ----------------------------------------------------------------- #
>
Model 3---MMNL Log Normal in WTP Space
# ####################################################### #
#### 1. Definition of core settings
# ####################################################### #
### Clear memory
rm(list = ls())
### Load libraries
library(apollo)
### Initialise code
apollo_initialise()
### Set core controls
apollo_control = list(
modelName ="MMNL",
modelDescr ="Mixed logit model on mode choice SP data",
indivID ="ID",
nCores = 4,
outputDirectory = "output"
)
# ####################################################### #
#### 2. Data loading ####
# ####################################################### #
database = read.csv("C:\\Users\\EDGAR/Desktop\\PilotDatas1.csv",header=TRUE)
# ####################################################### #
#### 3. Parameter definition ####
# ####################################################### #
### Vector of parameters, including any that are kept fixed
### during estimation
apollo_beta = c(asc_road = 0,
asc_mgr =-1.6,
asc_sgr = -2,
mu_log_b_c=-6,
sigma_log_b_c=0,
mu_log_vtt=5,
sigma_log_vtt=0,
b_rl=0.04,
b_ra=1.33
)
### Vector with names (in quotes) of parameters to be
### kept fixed at their starting value in apollo_beta.
### Use apollo_beta_fixed = c() for no fixed parameters.
apollo_fixed = c("asc_road")
### Set parameters for generating draws
apollo_draws = list(
interDrawsType = "halton",
interNDraws = 500,
interUnifDraws = c(),
interNormDraws = c("draws_vtt","draws_c"),
intraDrawsType = "halton",
intraNDraws = 0,
intraUnifDraws = c(),
intraNormDraws = c()
)
### Create random parameters
apollo_randCoeff = function(apollo_beta, apollo_inputs){
randcoeff = list()
randcoeff[["v_tt"]] = exp(mu_log_vtt + sigma_log_vtt * draws_vtt )
randcoeff[["b_c"]] = -exp( mu_log_b_c + sigma_log_b_c * draws_c )
return(randcoeff)
}
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimate"){
### Function initialization: do not change the following three commands
### 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[['road']] = asc_road + v_tt*b_c*time_road + b_c*cost_road + b_rl*rel_road
V[['mgr']] = asc_mgr + v_tt*b_c*time_mgr + b_c*cost_mgr + b_rl*rel_mgr + b_ra*ra_mgr
V[['sgr']] = asc_sgr + v_tt*b_c*time_sgr + b_c*cost_sgr+ b_rl*rel_sgr + b_ra* ra_sgr
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(road=1, mgr=2, sgr=3),
choiceVar = choice,
V = V
)
### Compute probabilities using MNL model
P[["model"]] = apollo_mnl(mnl_settings, functionality)
### Take product across observation for same individual
### Average across inter-individual draws
P = apollo_avgInterDraws(P, apollo_inputs, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
# ################################################################# #
#### MODEL ESTIMATION ####
# ################################################################# #
model = apollo_estimate(apollo_beta, apollo_fixed,
apollo_probabilities, apollo_inputs )
deltaMethod_settings <- list(operation="lognormal", parName1="mu_log_vtt", parName2="sigma_log_vtt")
apollo_deltaMethod(model, deltaMethod_settings)
# ################################################################# #
#### MODEL OUTPUTS ####
# ################################################################# #
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO SCREEN) ----
# ----------------------------------------------------------------- #
apollo_modelOutput(model)
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO FILE, using model name) ----
# ----------------------------------------------------------------- #
apollo_saveOutput(model)
#### 7. Postprocessing of results ####
# ####################################################### #
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model,
apollo_probabilities,
apollo_inputs)
apollo_combineResults()
apollo_sink()
apollo_sink()
Model 3 Results
Model name : MMNL
Model description : Mixed logit model on mode choice SP data
Model run at : 2023-12-07 09:20:26.906073
Estimation method : bgw
Model diagnosis : Relative function convergence
Optimisation diagnosis : Maximum found
hessian properties : Negative definite
maximum eigenvalue : -5.209627
reciprocal of condition number : 5.93112e-05
Number of individuals : 1260
Number of rows in database : 1260
Number of modelled outcomes : 1260
Number of cores used : 4
Number of inter-individual draws : 500 (halton)
WARNING: Inter-individual draws were used
without a panel data structure.
LL(start) : -896.08
LL at equal shares, LL(0) : -1384.25
LL at observed shares, LL(C) : -1233.12
LL(final) : -808.02
Rho-squared vs equal shares : 0.4163
Adj.Rho-squared vs equal shares : 0.4105
Rho-squared vs observed shares : 0.3447
Adj.Rho-squared vs observed shares : 0.3399
AIC : 1632.05
BIC : 1673.16
Estimated parameters : 8
Time taken (hh:mm:ss) : 00:02:20.88
pre-estimation : 00:00:44
estimation : 00:00:29.16
initial estimation : 00:00:25.79
estimation after rescaling : 00:00:3.36
post-estimation : 00:01:7.73
Iterations : 16
initial estimation : 15
estimation after rescaling : 1
Unconstrained optimisation.
Estimates:
Estimate s.e. t.rat.(0) Rob.s.e. Rob.t.rat.(0)
asc_road 0.000000 NA NA NA NA
asc_mgr -4.318767 0.40580 -10.64271 0.438765 -9.8430
asc_sgr -0.362105 0.21996 -1.64624 0.208218 -1.7391
mu_log_b_c -5.986683 0.10577 -56.59876 0.116212 -51.5151
sigma_log_b_c -1.020471 0.12333 -8.27434 0.123080 -8.2911
mu_log_vtt 4.545351 0.06908 65.79495 0.062431 72.8055
sigma_log_vtt 0.013708 0.14060 0.09749 0.037246 0.3680
b_rl -0.008711 0.01012 -0.86060 0.009676 -0.9002
b_ra 1.921541 0.17559 10.94312 0.196578 9.7750
Thank you for Apollo.
I'm wondering why there is a significant difference in model estimates in WTP space with those in Preference space.
I can not figure out the cause of this difference.
Model 3 (MMNL-WTP) results are very different from Model 1 (MNL) and Model 2(MMNL-Preference)
I would highly appreciate if you could take a look and advise what would cause this and how to fix it.
Thank you very much in advance.
Edgar
CODES
Model 1- MNL IN PREFENCE SPACE
### Set core controls
apollo_control = list(
modelName ="MNL in Preference space-Model",
modelDescr ="Simple MNL model on mode choice SP data",
indivID ="ID"
)
# ####################################################### #
#### 2. Data loading ####
# ####################################################### #
database = read.csv("C:\\Users\\EDGAR/Desktop\\PilotDatas1.csv",header=TRUE)
### Use only SP data
# ####################################################### #
#### 3. Parameter definition ####
# ####################################################### #
### Vector of parameters, including any that are kept fixed
### during estimation
apollo_beta=c(asc_road = 0,
asc_mgr = 0,
asc_sgr = 0,
b_tt = 0,
b_c = 0,
b_rl=0,
b_ra=0
)
### Vector with names (in quotes) of parameters to be
### kept fixed at their starting value in apollo_beta.
### Use apollo_beta_fixed = c() for no fixed parameters.
apollo_fixed = c("asc_road")
# ####################################################### #
#### 4. Input validation ####
# ####################################################### #
apollo_inputs = apollo_validateInputs()
# ####################################################### #
#### 5. Likelihood definition ####
# ####################################################### #
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[['road']] = asc_road + b_tt*time_road + b_c*cost_road + b_rl*rel_road
V[['mgr']] = asc_mgr + b_tt*time_mgr + b_c*cost_mgr + b_rl*rel_mgr + b_ra*ra_mgr
V[['sgr']] = asc_sgr + b_tt*time_sgr + b_c*cost_sgr+ b_rl*rel_sgr + b_ra* ra_sgr
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(road=1, mgr=2, sgr=3),
choiceVar = choice,
V = V
)
### Compute probabilities using MNL model
P[['model']] = apollo_mnl(mnl_settings, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
# ####################################################### #
#### 6. Model estimation and reporting ####
# ####################################################### #
model = apollo_estimate(apollo_beta, apollo_fixed,
apollo_probabilities,
apollo_inputs,
list(writeIter=FALSE))
apollo_modelOutput(model)
apollo_modelOutput(model, modelOutput_settings = list(printPVal=1)) # for one sided t-test
apollo_modelOutput(model, modelOutput_settings = list(printPVal=2)) # for two sided t-test
apollo_saveOutput(model, saveOutput_settings = list(printPVal=1)) # for one sided t-test
apollo_saveOutput(model, saveOutput_settings = list(printPVal=2)) # for two sided t-test
?apollo_modelOutput # for more details
#apollo_saveOutput(model)
apollo_saveOutput(model)
# ####################################################### #
#### 7. Postprocessing of results ####
# ####################################################### #
apollo_saveOutput(model, saveOutput_settings = NA)
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model,
apollo_probabilities,
apollo_inputs)
######apollo_combineResults()
apollo_sink()
apollo_sink()
Model 1 Results
Model name : MNL
Model description : Simple MNL model on mode choice SP data
Model run at : 2023-12-07 08:54:29.888698
Estimation method : bgw
Model diagnosis : Relative function convergence
Optimisation diagnosis : Maximum found
hessian properties : Negative definite
maximum eigenvalue : -1.177771
reciprocal of condition number : 6.62314e-09
Number of individuals : 1260
Number of rows in database : 1260
Number of modelled outcomes : 1260
Number of cores used : 1
Model without mixing
LL(start) : -1384.25
LL at equal shares, LL(0) : -1384.25
LL at observed shares, LL(C) : -1233.12
LL(final) : -823.74
Rho-squared vs equal shares : 0.4049
Adj.Rho-squared vs equal shares : 0.4006
Rho-squared vs observed shares : 0.332
Adj.Rho-squared vs observed shares : 0.3287
AIC : 1659.48
BIC : 1690.32
Estimated parameters : 6
Time taken (hh:mm:ss) : 00:00:1.1
pre-estimation : 00:00:0.61
estimation : 00:00:0.23
initial estimation : 00:00:0.19
estimation after rescaling : 00:00:0.04
post-estimation : 00:00:0.27
Iterations : 11
initial estimation : 10
estimation after rescaling : 1
Unconstrained optimisation.
Estimates:
Estimate s.e. t.rat.(0) p(2-sided) Rob.s.e. Rob.t.rat.(0) p(2-sided)
asc_road 0.000000 NA NA NA NA NA NA
asc_mgr -1.637799 0.72166 -2.269 0.023239 0.76617 -2.138 0.032546
asc_sgr -1.771418 0.59219 -2.991 0.002778 0.61441 -2.883 0.003938
b_tt -0.372319 0.06859 -5.428 5.702e-08 0.07520 -4.951 7.378e-07
b_c -0.001906 1.9895e-04 -9.583 0.000000 2.0424e-04 -9.334 0.000000
b_rl 0.047630 0.02022 2.356 0.018470 0.02082 2.288 0.022166
b_ra 1.334855 0.13954 9.566 0.000000 0.16399 8.140 4.441e-16
> apollo_saveOutput(model, saveOutput_settings = list(printPVal=1)) # for one sided t-test
Model 2 - MMNL-Lognormal preference space
# ####################################################### #
#### 1. Definition of core settings
# ####################################################### #
### Clear memory
rm(list = ls())
### Load libraries
library(apollo)
### Initialise code
apollo_initialise()
### Set core controls
apollo_control = list(
modelName ="MMNL in Preference Space",
modelDescr ="Mixed logit model on mode choice SP data",
indivID ="ID",
nCores = 4,
outputDirectory = "output"
)
# ####################################################### #
#### 2. Data loading ####
# ####################################################### #
database = read.csv("C:\\Users\\EDGAR/Desktop\\PilotDatas1.csv",header=TRUE)
# ####################################################### #
#### 3. Parameter definition ####
# ####################################################### #
### Vector of parameters, including any that are kept fixed
### during estimation
apollo_beta = c(asc_road = 0,
asc_mgr =-1.64,
asc_sgr = -1.77,
mu_b_tt = -5,
sigma_b_tt = 0,
mu_b_c = -5,
sigma_b_c = 0,
b_rl=0.05,
b_ra=1.3349
)
### Vector with names (in quotes) of parameters to be
### kept fixed at their starting value in apollo_beta.
### Use apollo_beta_fixed = c() for no fixed parameters.
apollo_fixed = c("asc_road")
### Set parameters for generating draws
apollo_draws = list(
interDrawsType = "halton",
interNDraws = 500,
interUnifDraws = c(),
interNormDraws = c("draws_tt","draws_c"),
intraDrawsType = "halton",
intraNDraws = 0,
intraUnifDraws = c(),
intraNormDraws = c()
)
### Create random parameters
apollo_randCoeff = function(apollo_beta, apollo_inputs){
randcoeff = list()
randcoeff[["b_tt"]] = -exp( mu_b_tt + sigma_b_tt * draws_tt )
randcoeff[["b_c"]] = -exp( mu_b_c + sigma_b_c * draws_c )
return(randcoeff)
}
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimate"){
### Function initialization: do not change the following three commands
### 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[['road']] = asc_road + b_tt*time_road + b_c*cost_road + b_rl*rel_road
V[['mgr']] = asc_mgr + b_tt*time_mgr + b_c*cost_mgr + b_rl*rel_mgr + b_ra*ra_mgr
V[['sgr']] = asc_sgr + b_tt*time_sgr + b_c*cost_sgr+ b_rl*rel_sgr + b_ra* ra_sgr
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(road=1, mgr=2, sgr=3),
choiceVar = choice,
V = V
)
### Compute probabilities using MNL model
P[["model"]] = apollo_mnl(mnl_settings, functionality)
### Take product across observation for same individual
### Average across inter-individual draws
P = apollo_avgInterDraws(P, apollo_inputs, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
# ################################################################# #
#### MODEL ESTIMATION ####
# ################################################################# #
model = apollo_estimate(apollo_beta, apollo_fixed,
apollo_probabilities, apollo_inputs)
deltaMethod_settings <- list(operation="lognormal", parName1="mu_b_c", parName2="sigma_b_c")
apollo_deltaMethod(model, deltaMethod_settings)
deltaMethod_settings <- list(operation="lognormal", parName1="mu_b_tt", parName2="sigma_b_tt")
apollo_deltaMethod(model, deltaMethod_settings)
# ################################################################# #
#### MODEL OUTPUTS ####
# ################################################################# #
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO SCREEN) ----
# ----------------------------------------------------------------- #
apollo_modelOutput(model)
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO FILE, using model name) ----
# ----------------------------------------------------------------- #
apollo_saveOutput(model)
#### 7. Postprocessing of results ####
# ####################################################### #
apollo_saveOutput(model, saveOutput_settings = NA)
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model,
apollo_probabilities,
apollo_inputs)
apollo_combineResults(combineResults_settings= NULL)
apollo_sink()
apollo_sink()
Model 2 Results
Model name : MMNL in Preference Space
Model description : Mixed logit model on mode choice SP data
Model run at : 2023-12-07 08:59:43.5022
Estimation method : bgw
Model diagnosis : Relative function convergence
Optimisation diagnosis : Maximum found
hessian properties : Negative definite
maximum eigenvalue : -0.946184
reciprocal of condition number : 7.85808e-06
Number of individuals : 1260
Number of rows in database : 1260
Number of modelled outcomes : 1260
Number of cores used : 4
Number of inter-individual draws : 500 (halton)
WARNING: Inter-individual draws were used
without a panel data structure.
LL(start) : -4129.49
LL at equal shares, LL(0) : -1384.25
LL at observed shares, LL(C) : -1233.12
LL(final) : -818.54
Rho-squared vs equal shares : 0.4087
Adj.Rho-squared vs equal shares : 0.4029
Rho-squared vs observed shares : 0.3362
Adj.Rho-squared vs observed shares : 0.3313
AIC : 1653.08
BIC : 1694.19
Estimated parameters : 8
Time taken (hh:mm:ss) : 00:02:17.3
pre-estimation : 00:00:39.12
estimation : 00:00:30.62
initial estimation : 00:00:28.04
estimation after rescaling : 00:00:2.58
post-estimation : 00:01:7.56
Iterations : 20
initial estimation : 19
estimation after rescaling : 1
Unconstrained optimisation.
Estimates:
Estimate s.e. t.rat.(0) Rob.s.e. Rob.t.rat.(0)
asc_road 0.000000 NA NA NA NA
asc_mgr -1.617589 0.79049 -2.04631 0.843905 -1.9168
asc_sgr -2.254413 0.66557 -3.38721 0.678504 -3.3226
mu_b_tt -0.797232 0.17584 -4.53374 0.193030 -4.1301
sigma_b_tt 0.006742 0.15969 0.04222 0.008151 0.8272
mu_b_c -6.270572 0.12424 -50.47250 0.126086 -49.7324
sigma_b_c 0.495354 0.09304 5.32406 0.090055 5.5006
b_rl 0.056884 0.02263 2.51318 0.023136 2.4586
b_ra 1.528099 0.16308 9.37011 0.186279 8.2033
>
> # ----------------------------------------------------------------- #
> #---- FORMATTED OUTPUT (TO FILE, using model name) ----
> # ----------------------------------------------------------------- #
>
Model 3---MMNL Log Normal in WTP Space
# ####################################################### #
#### 1. Definition of core settings
# ####################################################### #
### Clear memory
rm(list = ls())
### Load libraries
library(apollo)
### Initialise code
apollo_initialise()
### Set core controls
apollo_control = list(
modelName ="MMNL",
modelDescr ="Mixed logit model on mode choice SP data",
indivID ="ID",
nCores = 4,
outputDirectory = "output"
)
# ####################################################### #
#### 2. Data loading ####
# ####################################################### #
database = read.csv("C:\\Users\\EDGAR/Desktop\\PilotDatas1.csv",header=TRUE)
# ####################################################### #
#### 3. Parameter definition ####
# ####################################################### #
### Vector of parameters, including any that are kept fixed
### during estimation
apollo_beta = c(asc_road = 0,
asc_mgr =-1.6,
asc_sgr = -2,
mu_log_b_c=-6,
sigma_log_b_c=0,
mu_log_vtt=5,
sigma_log_vtt=0,
b_rl=0.04,
b_ra=1.33
)
### Vector with names (in quotes) of parameters to be
### kept fixed at their starting value in apollo_beta.
### Use apollo_beta_fixed = c() for no fixed parameters.
apollo_fixed = c("asc_road")
### Set parameters for generating draws
apollo_draws = list(
interDrawsType = "halton",
interNDraws = 500,
interUnifDraws = c(),
interNormDraws = c("draws_vtt","draws_c"),
intraDrawsType = "halton",
intraNDraws = 0,
intraUnifDraws = c(),
intraNormDraws = c()
)
### Create random parameters
apollo_randCoeff = function(apollo_beta, apollo_inputs){
randcoeff = list()
randcoeff[["v_tt"]] = exp(mu_log_vtt + sigma_log_vtt * draws_vtt )
randcoeff[["b_c"]] = -exp( mu_log_b_c + sigma_log_b_c * draws_c )
return(randcoeff)
}
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimate"){
### Function initialization: do not change the following three commands
### 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[['road']] = asc_road + v_tt*b_c*time_road + b_c*cost_road + b_rl*rel_road
V[['mgr']] = asc_mgr + v_tt*b_c*time_mgr + b_c*cost_mgr + b_rl*rel_mgr + b_ra*ra_mgr
V[['sgr']] = asc_sgr + v_tt*b_c*time_sgr + b_c*cost_sgr+ b_rl*rel_sgr + b_ra* ra_sgr
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(road=1, mgr=2, sgr=3),
choiceVar = choice,
V = V
)
### Compute probabilities using MNL model
P[["model"]] = apollo_mnl(mnl_settings, functionality)
### Take product across observation for same individual
### Average across inter-individual draws
P = apollo_avgInterDraws(P, apollo_inputs, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
# ################################################################# #
#### MODEL ESTIMATION ####
# ################################################################# #
model = apollo_estimate(apollo_beta, apollo_fixed,
apollo_probabilities, apollo_inputs )
deltaMethod_settings <- list(operation="lognormal", parName1="mu_log_vtt", parName2="sigma_log_vtt")
apollo_deltaMethod(model, deltaMethod_settings)
# ################################################################# #
#### MODEL OUTPUTS ####
# ################################################################# #
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO SCREEN) ----
# ----------------------------------------------------------------- #
apollo_modelOutput(model)
# ----------------------------------------------------------------- #
#---- FORMATTED OUTPUT (TO FILE, using model name) ----
# ----------------------------------------------------------------- #
apollo_saveOutput(model)
#### 7. Postprocessing of results ####
# ####################################################### #
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model,
apollo_probabilities,
apollo_inputs)
apollo_combineResults()
apollo_sink()
apollo_sink()
Model 3 Results
Model name : MMNL
Model description : Mixed logit model on mode choice SP data
Model run at : 2023-12-07 09:20:26.906073
Estimation method : bgw
Model diagnosis : Relative function convergence
Optimisation diagnosis : Maximum found
hessian properties : Negative definite
maximum eigenvalue : -5.209627
reciprocal of condition number : 5.93112e-05
Number of individuals : 1260
Number of rows in database : 1260
Number of modelled outcomes : 1260
Number of cores used : 4
Number of inter-individual draws : 500 (halton)
WARNING: Inter-individual draws were used
without a panel data structure.
LL(start) : -896.08
LL at equal shares, LL(0) : -1384.25
LL at observed shares, LL(C) : -1233.12
LL(final) : -808.02
Rho-squared vs equal shares : 0.4163
Adj.Rho-squared vs equal shares : 0.4105
Rho-squared vs observed shares : 0.3447
Adj.Rho-squared vs observed shares : 0.3399
AIC : 1632.05
BIC : 1673.16
Estimated parameters : 8
Time taken (hh:mm:ss) : 00:02:20.88
pre-estimation : 00:00:44
estimation : 00:00:29.16
initial estimation : 00:00:25.79
estimation after rescaling : 00:00:3.36
post-estimation : 00:01:7.73
Iterations : 16
initial estimation : 15
estimation after rescaling : 1
Unconstrained optimisation.
Estimates:
Estimate s.e. t.rat.(0) Rob.s.e. Rob.t.rat.(0)
asc_road 0.000000 NA NA NA NA
asc_mgr -4.318767 0.40580 -10.64271 0.438765 -9.8430
asc_sgr -0.362105 0.21996 -1.64624 0.208218 -1.7391
mu_log_b_c -5.986683 0.10577 -56.59876 0.116212 -51.5151
sigma_log_b_c -1.020471 0.12333 -8.27434 0.123080 -8.2911
mu_log_vtt 4.545351 0.06908 65.79495 0.062431 72.8055
sigma_log_vtt 0.013708 0.14060 0.09749 0.037246 0.3680
b_rl -0.008711 0.01012 -0.86060 0.009676 -0.9002
b_ra 1.921541 0.17559 10.94312 0.196578 9.7750