Please note that I have tried several specifications with trail & error looking to the large coefficients, changing priors (started with values from simple logit model). For the sake of clarification, I changed the fixed alternative setting as well. But the issue remains the same.
Attaching a simple specified code for reference.
Code: Select all
## Initialization
rm(list=ls())
library(apollo)
apollo_initialise()
## Set Core Controls
apollo_control= list(
modelName= "ICLV",
modelDescr= "Mode choice with latent variable",
indivID= "ID"
)
## Load database
database= read.csv("#####/iclvdata-2.csv", header=T)
## Parameter operations
database$orgbus= database$orgbus / 100
database$desbus= database$desbus / 100
database$tc_mpv= database$tc_mpv / 1000
database$tc_mpt= database$tc_mpt / 1000
database$tt_pv= database$tt_pv / 10
database$tt_pt= database$tt_pt / 10
## Definition of Model Parameters
### Vector of Parameters to be estimated
apollo_beta= c(# Alternate Specific Constants
asc_pv= 1.029,
asc_pt= 0,
# Social-Economic parameters
gamma_female_comfort= 0, gamma_female_ttr= 0, gamma_female_cleanliness= 0, gamma_female_staffbehaviour= 0, gamma_female_envisusitain= 0,
gamma_age_under18_comfort= 0, gamma_age_under18_ttr= 0, gamma_age_under18_cleanliness= 0, gamma_age_under18_staffbehaviour= 0, gamma_age_under18_envisusitain= 0,
gamma_age_1830_comfort= 0, gamma_age_1830_ttr= 0, gamma_age_1830_cleanliness= 0, gamma_age_1830_staffbehaviour= 0, gamma_age_1830_envisusitain= 0,
gamma_age_3040_comfort= 0, gamma_age_3040_ttr= 0, gamma_age_3040_cleanliness= 0, gamma_age_3040_staffbehaviour= 0, gamma_age_3040_envisusitain= 0,
gamma_age_4050_comfort= 0, gamma_age_4050_ttr= 0, gamma_age_4050_cleanliness= 0, gamma_age_4050_staffbehaviour= 0, gamma_age_4050_envisusitain= 0,
gamma_age_5060_comfort= 0, gamma_age_5060_ttr= 0, gamma_age_5060_cleanliness= 0, gamma_age_5060_staffbehaviour= 0, gamma_age_5060_envisusitain= 0,
gamma_age_above60= 0, #fixed
gamma_fincome_30k_comfort= 0, gamma_fincome_30k_ttr= 0, gamma_fincome_30k_cleanliness= 0, gamma_fincome_30k_staffbehaviour= 0, gamma_fincome_30k_envisusitain= 0,
gamma_fincome_30k60k_comfort= 0, gamma_fincome_30k60k_ttr= 0, gamma_fincome_30k60k_cleanliness= 0, gamma_fincome_30k60k_staffbehaviour= 0, gamma_fincome_30k60k_envisusitain= 0,
gamma_fincome_60k90k_comfort= 0, gamma_fincome_60k90k_ttr= 0, gamma_fincome_60k90k_cleanliness= 0, gamma_fincome_60k90k_staffbehaviour= 0, gamma_fincome_60k90k_envisusitain= 0,
gamma_fincome_90k120k_comfort= 0, gamma_fincome_90k120k_ttr= 0, gamma_fincome_90k120k_cleanliness= 0, gamma_fincome_90k120k_staffbehaviour= 0, gamma_fincome_90k120k_envisusitain= 0,
gamma_fincome_120k150k_comfort= 0, gamma_fincome_120k150k_ttr= 0, gamma_fincome_120k150k_cleanliness= 0, gamma_fincome_120k150k_staffbehaviour= 0, gamma_fincome_120k150k_envisusitain= 0,
gamma_fincome_150k= 0, #fixed
# Trip attributes
b_tt_pv= -0.403, b_tt_pt= 0,
b_tc_pv= 0.008, b_tc_pt= 0,
# Latent variables and thresholds in SEM component
zeta_comfort1= 1, zeta_comfort2= 1, zeta_comfort3= 1, zeta_comfort4= 1,
zeta_ttr1= 1, zeta_ttr2= 1, zeta_ttr3= 1,
zeta_cleanliness1= 1, zeta_cleanliness2= 1,
zeta_staffbehaviour1= 1, zeta_staffbehaviour2= 1,
zeta_envisusitain1= 1, zeta_envisusitain2= 1,
tau_comfort1_1= -2, tau_comfort1_2= -1, tau_comfort1_3= 1,
tau_comfort2_1= -2, tau_comfort2_2= -1, tau_comfort2_3= 1, tau_comfort2_4= 2,
tau_comfort3_1= -2, tau_comfort3_2= -1, tau_comfort3_3= 1,
tau_comfort4_1= -2, tau_comfort4_2= -1, tau_comfort4_3= 1,
tau_ttr1_1= -2, tau_ttr1_2= -1, tau_ttr1_3= 1,
tau_ttr2_1= -2, tau_ttr2_2= -1, tau_ttr2_3= 1,
tau_ttr3_1= -1, tau_ttr3_2= 1,
tau_cleanliness1_1= -1, tau_cleanliness1_2= 1,
tau_cleanliness2_1= -2, tau_cleanliness2_2= -1, tau_cleanliness2_3= 1,
tau_staffbehaviour1_1= -2, tau_staffbehaviour1_2= -1, tau_staffbehaviour1_3= 1, tau_staffbehaviour1_4= 2,
tau_staffbehaviour2_1= -2, tau_staffbehaviour2_2= -1, tau_staffbehaviour2_3= 1, tau_staffbehaviour2_4= 2,
tau_envisusitain1_1= -1, tau_envisusitain1_2= 1,
tau_envisusitain2_1= -2, tau_envisusitain2_2= -1, tau_envisusitain2_3= 1,
# Latent variables in choice model component
lambda_comfort=0,
lambda_ttr=0,
lambda_cleanliness=0,
lambda_staffbehaviour=0,
lambda_envisusitain=0,
# ETA
eta1= 0, eta2= 0, eta3= 0, eta4= 0, eta6= 0
)
## Parameters to be kept FIXED
apollo_fixed= c("asc_pt", 'gamma_age_above60', 'gamma_fincome_150k')
## Group and Validate Inputs
apollo_inputs= apollo_validateInputs()
## Model Definition 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 Random LVs
comfort= gamma_female_comfort*female + gamma_age_under18_comfort*(age==1) + gamma_age_1830_comfort*(age==2) + gamma_age_3040_comfort*(age==3) + gamma_age_4050_comfort*(age==4) + gamma_age_5060_comfort*(age==5) + gamma_fincome_30k_comfort*(fincome==1) + gamma_fincome_30k60k_comfort*(fincome==2) + gamma_fincome_60k90k_comfort*(fincome==3) + gamma_fincome_90k120k_comfort*(fincome==4) + gamma_fincome_120k150k_comfort*(fincome==5) + eta1
ttr= gamma_female_ttr*female + gamma_age_under18_ttr*(age==1) + gamma_age_1830_ttr*(age==2) + gamma_age_3040_ttr*(age==3) + gamma_age_4050_ttr*(age==4) + gamma_age_5060_ttr*(age==5) + gamma_fincome_30k_ttr*(fincome==1) + gamma_fincome_30k60k_ttr*(fincome==2) + gamma_fincome_60k90k_ttr*(fincome==3) + gamma_fincome_90k120k_ttr*(fincome==4) + gamma_fincome_120k150k_ttr*(fincome==5) + eta2
cleanliness= gamma_female_cleanliness*female + gamma_age_under18_cleanliness*(age==1) + gamma_age_1830_cleanliness*(age==2) + gamma_age_3040_cleanliness*(age==3) + gamma_age_4050_cleanliness*(age==4) + gamma_age_5060_cleanliness*(age==5) + gamma_fincome_30k_cleanliness*(fincome==1) + gamma_fincome_30k60k_cleanliness*(fincome==2) + gamma_fincome_60k90k_cleanliness*(fincome==3) + gamma_fincome_90k120k_cleanliness*(fincome==4) + gamma_fincome_120k150k_cleanliness*(fincome==5) + eta3
staffbehaviour= gamma_female_staffbehaviour*female + gamma_age_under18_staffbehaviour*(age==1) + gamma_age_1830_staffbehaviour*(age==2) + gamma_age_3040_staffbehaviour*(age==3) + gamma_age_4050_staffbehaviour*(age==4) + gamma_age_5060_staffbehaviour*(age==5) + gamma_fincome_30k_staffbehaviour*(fincome==1) + gamma_fincome_30k60k_staffbehaviour*(fincome==2) + gamma_fincome_60k90k_staffbehaviour*(fincome==3) + gamma_fincome_90k120k_staffbehaviour*(fincome==4) + gamma_fincome_120k150k_staffbehaviour*(fincome==5) + eta4
envisusitain= gamma_female_envisusitain*female + gamma_age_under18_envisusitain*(age==1) + gamma_age_1830_envisusitain*(age==2) + gamma_age_3040_envisusitain*(age==3) + gamma_age_4050_envisusitain*(age==4) + gamma_age_5060_envisusitain*(age==5) + gamma_fincome_30k_envisusitain*(fincome==1) + gamma_fincome_30k60k_envisusitain*(fincome==2) + gamma_fincome_60k90k_envisusitain*(fincome==3) + gamma_fincome_90k120k_envisusitain*(fincome==4) + gamma_fincome_120k150k_envisusitain*(fincome==5) + eta6
# Creating list of probabilities P
P= list()
## Likelihood of Choices
## List of utilities
V= list()
V[['pv']]= (asc_pv + b_tt_pv*tt_pv + b_tc_pv*tc_mpv +
lambda_comfort*comfort + lambda_ttr*ttr + lambda_cleanliness*cleanliness + lambda_staffbehaviour*staffbehaviour + lambda_envisusitain*envisusitain)
V[['pt']]= (asc_pt + b_tt_pt*tt_pt + b_tc_pt*tc_mpt +
lambda_comfort*comfort + lambda_ttr*ttr + lambda_cleanliness*cleanliness + lambda_staffbehaviour*staffbehaviour + lambda_envisusitain*envisusitain)
## Settings for MNL model component
mnl_settings= list(
alternatives= c(pv=1, pt=2),
avail= list(pv=av_pv, pt=av_pt),
choiceVar= mode,
V= V
)
## Computing probabilities for MNL model component
P[["choice"]]= apollo_mnl(mnl_settings, functionality)
# Likelihood of indicators to the LVs
ol_settings1= list(outcomeOrdered= comfort1,
V= zeta_comfort1*comfort,
tau= list(tau_comfort1_1, tau_comfort1_2, tau_comfort1_3),
rows=comfort1!=0)
ol_settings2= list(outcomeOrdered= comfort2,
V= zeta_comfort2*comfort,
tau= list(tau_comfort2_1, tau_comfort2_2, tau_comfort2_3, tau_comfort2_4),
rows=comfort2!=0)
ol_settings3= list(outcomeOrdered= comfort3,
V= zeta_comfort3*comfort,
tau= list(tau_comfort3_1, tau_comfort3_2, tau_comfort3_3),
rows=comfort3!=0)
ol_settings4= list(outcomeOrdered= comfort4,
V= zeta_comfort4*comfort,
tau= list(tau_comfort4_1, tau_comfort4_2, tau_comfort4_3),
rows=comfort4!=0)
ol_settings5= list(outcomeOrdered= ttr1,
V= zeta_ttr1*ttr,
tau= list(tau_ttr1_1, tau_ttr1_2, tau_ttr1_3),
rows=ttr1!=0)
ol_settings6= list(outcomeOrdered= ttr2,
V= zeta_ttr2*ttr,
tau= list(tau_ttr2_1, tau_ttr2_2, tau_ttr2_3),
rows=ttr2!=0)
ol_settings7= list(outcomeOrdered= ttr3,
V= zeta_ttr3*ttr,
tau= list(tau_ttr3_1, tau_ttr3_2),
rows=ttr3!=0)
ol_settings8= list(outcomeOrdered= cleanliness1,
V= zeta_cleanliness1*cleanliness,
tau= list(tau_cleanliness1_1, tau_cleanliness1_2),
rows=cleanliness1!=0)
ol_settings9= list(outcomeOrdered= cleanliness2,
V= zeta_cleanliness2*cleanliness,
tau= list(tau_cleanliness2_1, tau_cleanliness2_2, tau_cleanliness2_3),
rows=cleanliness2!=0)
ol_settings10= list(outcomeOrdered= staffbehaviour1,
V= zeta_staffbehaviour1*staffbehaviour,
tau= list(tau_staffbehaviour1_1, tau_staffbehaviour1_2, tau_staffbehaviour1_3, tau_staffbehaviour1_4),
rows=staffbehaviour1!=0)
ol_settings11= list(outcomeOrdered= staffbehaviour2,
V= zeta_staffbehaviour2*staffbehaviour,
tau= list(tau_staffbehaviour2_1, tau_staffbehaviour2_2, tau_staffbehaviour2_3, tau_staffbehaviour2_4),
rows=staffbehaviour2!=0)
ol_settings14= list(outcomeOrdered= envisusitain1,
V= zeta_envisusitain1*envisusitain,
tau= list(tau_envisusitain1_1, tau_envisusitain1_2),
rows=envisusitain1!=0)
ol_settings15= list(outcomeOrdered= envisusitain2,
V= zeta_envisusitain2*envisusitain,
tau= list(tau_envisusitain2_1, tau_envisusitain2_2, tau_envisusitain2_3),
rows=envisusitain2!=0)
P[["indic_comfort1"]]= apollo_ol(ol_settings1, functionality)
P[["indic_comfort2"]]= apollo_ol(ol_settings2, functionality)
P[["indic_comfort3"]]= apollo_ol(ol_settings3, functionality)
P[["indic_comfort4"]]= apollo_ol(ol_settings4, functionality)
P[["indic_ttr1"]]= apollo_ol(ol_settings5, functionality)
P[["indic_ttr2"]]= apollo_ol(ol_settings6, functionality)
P[["indic_ttr3"]]= apollo_ol(ol_settings7, functionality)
P[["indic_cleanliness1"]]= apollo_ol(ol_settings8, functionality)
P[["indic_cleanliness2"]]= apollo_ol(ol_settings9, functionality)
P[["indic_staffbehaviour1"]]= apollo_ol(ol_settings10, functionality)
P[["indic_staffbehaviour2"]]= apollo_ol(ol_settings11, functionality)
P[["indic_envisusitain1"]]= apollo_ol(ol_settings14, functionality)
P[["indic_envisusitain2"]]= apollo_ol(ol_settings15, functionality)
## Likelihood of the whole combined model
P= apollo_combineModels(P, apollo_inputs, functionality)
## Prepare and return the outputs of the function
P= apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
L <- apollo_probabilities(apollo_beta, apollo_inputs, 'estimate')
## Model Estimation
# Likelihood before model estimation
apollo_llCalc(apollo_beta, apollo_probabilities, apollo_inputs)
# Estimate Model
model = apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, apollo_inputs)
## Model Output
## apollo_modelOutput(model)
apollo_saveOutput(model)