Important: Read this before posting to this forum

  1. This forum is for questions related to the use of Apollo. We will answer some general choice modelling questions too, where appropriate, and time permitting. We cannot answer questions about how to estimate choice models with other software packages.
  2. There is a very detailed manual for Apollo available at http://www.ApolloChoiceModelling.com/manual.html. This contains detailed descriptions of the various Apollo functions, and numerous examples are available at http://www.ApolloChoiceModelling.com/examples.html. In addition, help files are available for all functions, using e.g. ?apollo_mnl
  3. Before asking a question on the forum, users are kindly requested to follow these steps:
    1. Check that the same issue has not already been addressed in the forum - there is a search tool.
    2. Ensure that the correct syntax has been used. For any function, detailed instructions are available directly in Apollo, e.g. by using ?apollo_mnl for apollo_mnl
    3. Check the frequently asked questions section on the Apollo website, which discusses some common issues/failures. Please see http://www.apollochoicemodelling.com/faq.html
    4. Make sure that R is using the latest official release of Apollo.
  4. If the above steps do not resolve the issue, then users should follow these steps when posting a question:
    1. provide full details on the issue, including the entire code and output, including any error messages
    2. posts will not immediately appear on the forum, but will be checked by a moderator first. We check the forum at least twice a week. It may thus take a couple of days for your post to appear and before we reply. There is no need to submit the post multiple times.

Fixed effects of Latent Variables in Latent Class Model

Ask questions about model specifications. Ideally include a mathematical explanation of your proposed model.
Post Reply
janak12_jp
Posts: 16
Joined: 08 Sep 2021, 16:52

Fixed effects of Latent Variables in Latent Class Model

Post by janak12_jp »

Hii,

I am estimating ICLV model with two Latent Classes. My model is quite complex and computationally burdensome (extremely time consuming).

The model has 7 latent variables. With original specifications, where I kept all 7 LVs as random parameters in apollo_randCoeff. But it could not finished estimation even after 30 days. So, I decided to run the estimation keeping Latent variables as fixed except one (which is affecting the Latent Class probability). Though, I am aware that LVs are random parameters, to reduce the estimation time, I wanted to try with this method. However, the estimated parameters show that I got "zero" for all the parameters related to these fixed LVs. I am not sure if I have correctly specified these parameters in the model. The code is as below:

Code: Select all

## Clear memory

rm(list = ls())

## Load apollo library

library(apollo)

## Initialise code

apollo_initialise()

## Set core controls

apollo_control = list(
  modelName = "LC with MMNL",
  modelDescr = "LC with random coefficients",
  indivID = "ID",
  nCores = 7,
  outputDirectory = "output"
)

## Load data

database = read.csv("Analysis.csv", header = T)

## Define model parameters
## Vector of parameters to be estimated

apollo_beta = c(
  ## class-specific choice utility 
  # class a
  asc_car_a = 0, car_ivtt_a = 0, car_egt_a = 0, car_tc_a = 0, car_pc_a = 0, lm_innv_car_a = 0, lm_skpt_car_a = 0, lm_risk_car_a = 0, lm_use_car_a = 0, lm_sn_car_a = 0, lm_env_car_a = 0, 
  asc_pt_a = 0, pt_ivtt_a = 0, pt_act_a = 0, pt_egt_a = 0, pt_wt_a = 0, pt_tc_a = 0, lm_innv_pt_a = 0, lm_skpt_pt_a = 0, lm_risk_pt_a = 0, lm_use_pt_a = 0, lm_sn_pt_a = 0, lm_env_pt_a = 0, 
  asc_ecar_a = 0, ecar_ivtt_a = 0, ecar_act_a = 0, ecar_egt_a = 0, ecar_tc_a = 0, ecar_av_a = 0, ecar_wt_a = 0, lm_innv_ecar_a = 0, lm_skpt_ecar_a = 0, lm_risk_ecar_a = 0, lm_use_ecar_a = 0, lm_sn_ecar_a = 0, lm_env_ecar_a = 0, 
  asc_ebike_a = 0, ebike_ivtt_a = 0, ebike_act_a = 0, ebike_egt_a = 0, ebike_tc_a = 0, ebike_av_a = 0, ebike_wt_a = 0, lm_innv_ebike_a = 0, lm_skpt_ebike_a = 0, lm_risk_ebike_a = 0, lm_use_ebike_a = 0, lm_sn_ebike_a = 0, lm_env_ebike_a = 0, 
  asc_escoot_a = 0, escoot_ivtt_a = 0, escoot_act_a = 0, escoot_egt_a = 0, escoot_tc_a = 0, escoot_av_a = 0, escoot_wt_a = 0, lm_innv_escoot_a = 0, lm_skpt_escoot_a = 0, lm_risk_escoot_a = 0, lm_use_escoot_a = 0, lm_sn_escoot_a = 0, lm_env_escoot_a = 0, 
  asc_aebike_a = 0, aebike_ivtt_a = 0, aebike_wk_a = 0, aebike_tc_a = 0, aebike_av_a = 0, aebike_wt_a = 0, lm_innv_aebike_a = 0, lm_skpt_aebike_a = 0, lm_risk_aebike_a = 0, lm_use_aebike_a = 0, lm_sn_aebike_a = 0, lm_env_aebike_a = 0, 
  asc_aescoot_a = 0, aescoot_ivtt_a = 0, aescoot_wk_a = 0, aescoot_tc_a = 0, aescoot_av_a = 0, aescoot_wt_a = 0, lm_innv_aescoot_a = 0, lm_skpt_aescoot_a = 0, lm_risk_aescoot_a = 0, lm_use_aescoot_a = 0, lm_sn_aescoot_a = 0, lm_env_aescoot_a = 0, 
  asc_awalk_a = 0, awalk_a = 0, lm_risk_awalk_a = 0, lm_use_awalk_a = 0, 
  
  # class b
  asc_car_b = 0, car_ivtt_b = 0, car_egt_b = 0, car_tc_b = 0, car_pc_b = 0, lm_innv_car_b = 0, lm_skpt_car_b = 0, lm_risk_car_b = 0, lm_use_car_b = 0, lm_sn_car_b = 0, lm_env_car_b = 0, 
  asc_pt_b = 0, pt_ivtt_b = 0, pt_act_b = 0, pt_egt_b = 0, pt_wt_b = 0, pt_tc_b = 0, lm_innv_pt_b = 0, lm_skpt_pt_b = 0, lm_risk_pt_b = 0, lm_use_pt_b = 0, lm_sn_pt_b = 0, lm_env_pt_b = 0,
  asc_ecar_b = 0, ecar_ivtt_b = 0, ecar_act_b = 0, ecar_egt_b = 0, ecar_tc_b = 0, ecar_av_b = 0, ecar_wt_b = 0, lm_innv_ecar_b = 0, lm_skpt_ecar_b = 0, lm_risk_ecar_b = 0, lm_use_ecar_b = 0, lm_sn_ecar_b = 0, lm_env_ecar_b = 0, 
  asc_ebike_b = 0, ebike_ivtt_b = 0, ebike_act_b = 0, ebike_egt_b = 0, ebike_tc_b = 0, ebike_av_b = 0, ebike_wt_b = 0, lm_innv_ebike_b = 0, lm_skpt_ebike_b = 0, lm_risk_ebike_b = 0, lm_use_ebike_b = 0, lm_sn_ebike_b = 0, lm_env_ebike_b = 0, 
  asc_escoot_b = 0, escoot_ivtt_b = 0, escoot_act_b = 0, escoot_egt_b = 0, escoot_tc_b = 0, escoot_av_b = 0, escoot_wt_b = 0, lm_innv_escoot_b = 0, lm_skpt_escoot_b = 0, lm_risk_escoot_b = 0, lm_use_escoot_b = 0, lm_sn_escoot_b = 0, lm_env_escoot_b = 0, 
  asc_aebike_b = 0, aebike_ivtt_b = 0, aebike_wk_b = 0, aebike_tc_b = 0, aebike_av_b = 0, aebike_wt_b = 0, lm_innv_aebike_b = 0, lm_skpt_aebike_b = 0, lm_risk_aebike_b = 0, lm_use_aebike_b = 0, lm_sn_aebike_b = 0, lm_env_aebike_b = 0, 
  asc_aescoot_b = 0, aescoot_ivtt_b = 0, aescoot_wk_b = 0, aescoot_tc_b = 0, aescoot_av_b = 0, aescoot_wt_b = 0, lm_innv_aescoot_b = 0, lm_skpt_aescoot_b = 0, lm_risk_aescoot_b = 0, lm_use_aescoot_b = 0, lm_sn_aescoot_b = 0, lm_env_aescoot_b = 0, 
  asc_awalk_b = 0, awalk_b = 0, lm_risk_awalk_b = 0, lm_use_awalk_b = 0,
  
  # # class c
  # asc_car_c = 0, car_ivtt_c = -2.835, car_egt_c = -2.69, car_tc_c = -1.80, car_pc_c = 0.72, lm_innv_car_c = 0.44, lm_skpt_car_c = -0.43, lm_risk_car_c = 0.78, lm_use_car_c = 0, lm_sn_car_c = 0, lm_env_car_c = 0, 
  # asc_pt_c = 0, pt_ivtt_c = 0, pt_act_c = 0, pt_egt_c = 0, pt_wt_c = 0, pt_tc_c = 0, lm_innv_pt_c = 0, lm_skpt_pt_c = 0, lm_risk_pt_c = 0, lm_use_pt_c = 0, lm_sn_pt_c = 0, lm_env_pt_c = 0, 
  # asc_ecar_c = 0, ecar_ivtt_c = 0, ecar_act_c = 0, ecar_egt_c = 0, ecar_tc_c = 0, ecar_av_c = 0, ecar_wt_c = 0, lm_innv_ecar_c = 0, lm_skpt_ecar_c = 0, lm_risk_ecar_c = 0, lm_use_ecar_c = 0, lm_sn_ecar_c = 0, lm_env_ecar_c = 0, 
  # asc_ebike_c = 0, ebike_ivtt_c = 0, ebike_act_c = 0, ebike_egt_c = 0, ebike_tc_c = 0, ebike_av_c = 0, ebike_wt_c = 0, lm_innv_ebike_c = 0, lm_skpt_ebike_c = 0, lm_risk_ebike_c = 0, lm_use_ebike_c = 0, lm_sn_ebike_c = 0, lm_env_ebike_c = 0, 
  # asc_escoot_c = 0, escoot_ivtt_c = 0, escoot_act_c = 0, escoot_egt_c = 0, escoot_tc_c = 0, escoot_av_c = 0, escoot_wt_c = 0, lm_innv_escoot_c = 0, lm_skpt_escoot_c = 0, lm_risk_escoot_c = 0, lm_use_escoot_c = 0, lm_sn_escoot_c = 0, lm_env_escoot_c = 0, 
  # asc_aebike_c = 0, aebike_ivtt_c = 0, aebike_wk_c = 0, aebike_tc_c = 0, aebike_av_c = 0, aebike_wt_c = 0, lm_innv_aebike_c = 0, lm_skpt_aebike_c = 0, lm_risk_aebike_c = 0, lm_use_aebike_c = 0, lm_sn_aebike_c = 0, lm_env_aebike_c = 0, 
  # asc_aescoot_c = 0, aescoot_ivtt_c = 0, aescoot_wk_c = 0, aescoot_tc_c = 0, aescoot_av_c = 0, aescoot_wt_c = 0, lm_innv_aescoot_c = 0, lm_skpt_aescoot_c = 0, lm_risk_aescoot_c = 0, lm_use_aescoot_c = 0, lm_sn_aescoot_c = 0, lm_env_aescoot_c = 0, 
  # asc_awalk_c = 0, awalk_c = 0, lm_risk_awalk_c = 0, lm_use_awalk_c = 0,
  
  ## class-membership model
  # class a
  delta_a = 0, gm_female_a = 0, gm_age1_a = 0, gm_age2_a = 0, gm_age3_a = 0, gm_hhinc1_a = 0, gm_hhinc2_a = 0, gm_hhinc3_a = 0,
  gm_ncar0_a = 0, gm_ncar1_a = 0, gm_ncar2_a = 0, gm_nbic0_a = 0, gm_nbic1_a = 0, gm_nbic2_a = 0, gm_hhC_a = 0, lm_hab_a = 0,
  
  # class b
  delta_b = 0, gm_female_b = 0, gm_age1_b = 0, gm_age2_b = 0, gm_age3_b = 0, gm_hhinc1_b = 0, gm_hhinc2_b = 0, gm_hhinc3_b = 0,
  gm_ncar0_b = 0, gm_ncar1_b = 0, gm_ncar2_b = 0, gm_nbic0_b = 0, gm_nbic1_b = 0, gm_nbic2_b = 0, gm_hhC_b = 0, lm_hab_b = 0,
  
  # class c
  # delta_c = 0, gm_female_c = 0, gm_age1_c = 0, gm_age2_c = 0, gm_age3_c = 0, gm_hhinc1_c = 0, gm_hhinc2_c = 0, gm_hhinc3_c = 0,
  # gm_ncar0_c = 0, gm_ncar1_c = 0, gm_ncar2_c = 0, gm_nbic0_c = 0, gm_nbic1_c = 0, gm_nbic2_c = 0, gm_hhC_c = 0, lm_hab_c = 0,
  
  ## structural model for LVs
  gamma_age1_innv = 0, gamma_age2_innv = 0, gamma_age3_innv = 0, gamma_hhinc1_innv = 0, gamma_hhinc2_innv = 0, gamma_hhinc3_innv = 0, gamma_grad_innv = 0, gamma_female_innv = 0,
  gamma_age1_skpt = 0, gamma_age2_skpt = 0, gamma_age3_skpt = 0, gamma_hhinc1_skpt = 0, gamma_hhinc2_skpt = 0, gamma_hhinc3_skpt = 0, gamma_grad_skpt = 0, gamma_female_skpt = 0, 
  gamma_age1_risk = 0, gamma_age2_risk = 0, gamma_age3_risk = 0, gamma_hhinc1_risk = 0, gamma_hhinc2_risk = 0, gamma_hhinc3_risk = 0, gamma_grad_risk = 0, gamma_female_risk = 0, 
  gamma_age1_use = 0, gamma_age2_use = 0, gamma_age3_use = 0, gamma_hhinc1_use = 0, gamma_hhinc2_use = 0, gamma_hhinc3_use = 0, gamma_grad_use = 0, gamma_female_use = 0, 
  gamma_age1_sn = 0, gamma_age2_sn = 0, gamma_age3_sn = 0, gamma_hhinc1_sn = 0, gamma_hhinc2_sn = 0, gamma_hhinc3_sn = 0, gamma_grad_sn = 0, gamma_female_sn = 0, 
  gamma_age1_env = 0, gamma_age2_env = 0, gamma_age3_env = 0, gamma_hhinc1_env = 0, gamma_hhinc2_env = 0, gamma_hhinc3_env = 0, gamma_grad_env = 0, gamma_female_env = 0,
  gamma_age1_hab = 0, gamma_age2_hab = 0, gamma_age3_hab = 0, gamma_hhinc1_hab = 0, gamma_hhinc2_hab = 0, gamma_hhinc3_hab = 0, gamma_grad_hab = 0, gamma_female_hab = 0, 
  gamma_ncar0 = 0, gamma_ncar1 = 0, gamma_ncar2 = 0, gamma_nbic0 = 0, gamma_nbic1 = 0, gamma_nbic2 = 0,
  
  ## measurement model - LV to indicators
  zeta_innv1 = 0, zeta_innv2 = 0, zeta_innv3 = 0, zeta_skpt1 = 0, zeta_skpt2 = 0, zeta_skpt3 = 0, zeta_risk1 = 0, zeta_risk2 = 0, zeta_risk3 = 0,  
  zeta_use1 = 0, zeta_use2 = 0, zeta_use3 = 0, zeta_use4 = 0, zeta_use5 = 0, zeta_sn1 = 0, zeta_sn2 = 0, 
  zeta_env1 = 0, zeta_env2 = 0, zeta_env3 = 0, zeta_hab1 = 0, zeta_hab2 = 0, zeta_hab3 = 0, zeta_hab4 = 0, zeta_hab5 = 0,
  
  tau_innv1_1 = -2, tau_innv1_2 = -1, tau_innv1_3 = 1, tau_innv1_4 = 2,
  tau_innv2_1 = -2, tau_innv2_2 = -1, tau_innv2_3 = 1, tau_innv2_4 = 2,
  tau_innv3_1 = -2, tau_innv3_2 = -1, tau_innv3_3 = 1, tau_innv3_4 = 2,
  tau_skpt1_1 = -2, tau_skpt1_2 = -1, tau_skpt1_3 = 1, tau_skpt1_4 = 2,
  tau_skpt2_1 = -2, tau_skpt2_2 = -1, tau_skpt2_3 = 1, tau_skpt2_4 = 2,
  tau_skpt3_1 = -2, tau_skpt3_2 = -1, tau_skpt3_3 = 1, tau_skpt3_4 = 2,
  tau_risk1_1 = -2, tau_risk1_2 = -1, tau_risk1_3 = 1, tau_risk1_4 = 2,
  tau_risk2_1 = -2, tau_risk2_2 = -1, tau_risk2_3 = 1, tau_risk2_4 = 2,
  tau_risk3_1 = -2, tau_risk3_2 = -1, tau_risk3_3 = 1, tau_risk3_4 = 2,
  tau_use1_1 = -2, tau_use1_2 = -1, tau_use1_3 = 1, tau_use1_4 = 2,
  tau_use2_1 = -2, tau_use2_2 = -1, tau_use2_3 = 1, tau_use2_4 = 2,
  tau_use3_1 = -2, tau_use3_2 = -1, tau_use3_3 = 1, tau_use3_4 = 2,
  tau_use4_1 = -2, tau_use4_2 = -1, tau_use4_3 = 1, tau_use4_4 = 2,
  tau_use5_1 = -2, tau_use5_2 = -1, tau_use5_3 = 1, tau_use5_4 = 2,
  tau_sn1_1 = -2, tau_sn1_2 = -1, tau_sn1_3 = 1, tau_sn1_4 = 2,
  tau_sn2_1 = -2, tau_sn2_2 = -1, tau_sn2_3 = 1, tau_sn2_4 = 2,
  tau_env1_1 = -2, tau_env1_2 = -1, tau_env1_3 = 1, tau_env1_4 = 2,
  tau_env2_1 = -2, tau_env2_2 = -1, tau_env2_3 = 1, tau_env2_4 = 2,
  tau_env3_1 = -2, tau_env3_2 = -1, tau_env3_3 = 1, tau_env3_4 = 2,
  tau_hab1_1 = -2, tau_hab1_2 = -1, tau_hab1_3 = 1, tau_hab1_4 = 2,
  tau_hab2_1 = -2, tau_hab2_2 = -1, tau_hab2_3 = 1, tau_hab2_4 = 2,
  tau_hab3_1 = -2, tau_hab3_2 = -1, tau_hab3_3 = 1, tau_hab3_4 = 2,
  tau_hab4_1 = -2, tau_hab4_2 = -1, tau_hab4_3 = 1, tau_hab4_4 = 2,
  tau_hab5_1 = -2, tau_hab5_2 = -1, tau_hab5_3 = 1, tau_hab5_4 = 2,
  
  # ETA
  eta1= 0, eta2= 0, eta3= 0, eta4= 0, eta5= 0, eta6= 0
)

## Define fixed parameters in model

apollo_fixed = c("asc_car_a", "asc_awalk_a", "asc_car_b", "asc_awalk_b", "delta_b", "gm_female_b", "gm_age1_b", "gm_age2_b", "gm_age3_b", "gm_hhinc1_b", 
                 "gm_hhinc2_b", "gm_hhinc3_b", "gm_ncar0_b", "gm_ncar1_b", "gm_ncar2_b", "gm_nbic0_b", "gm_nbic1_b", "gm_nbic2_b", "gm_hhC_b", "lm_hab_b",
                 "gm_age3_a", "gm_hhinc3_a", "gm_ncar0_a", "gm_nbic0_a",
                 "gamma_age3_innv", "gamma_hhinc3_innv", "gamma_age3_skpt", "gamma_hhinc3_skpt", "gamma_age3_risk", "gamma_hhinc3_risk", "gamma_age3_sn", "gamma_hhinc3_sn",
                 "gamma_age3_env", "gamma_hhinc3_env","gamma_age3_use", "gamma_hhinc3_use", "gamma_age3_hab", "gamma_hhinc3_hab", "gamma_ncar0", "gamma_nbic0")

## Define random parameter

apollo_draws = list(
  interDrawsType = "mlhs",
  interNDraws = 1000,
  interNormDraws = c("eta")
)

apollo_randCoeff = function(apollo_beta, apollo_inputs) {
  randcoeff = list()
  
  randcoeff[["hab"]] = gamma_female_hab*female + gamma_age1_hab*(age==1) + gamma_age2_hab*(age==3) + gamma_age3_hab*(age==5) + gamma_hhinc1_hab*(hhinc==1) + gamma_hhinc2_hab*(hhinc==3) + gamma_hhinc3_hab*(hhinc==5) + gamma_grad_hab*edu + 
    gamma_ncar0*(ncar==0) + gamma_ncar1*(ncar==1) + gamma_ncar2*(ncar==2) + gamma_nbic0*(nbic==0) + gamma_nbic1*(nbic==1) + gamma_nbic2*(nbic==2) + eta
  
  return(randcoeff)
}

## Define latent class components 

apollo_lcPars = function(apollo_beta, apollo_inputs){
  lcpars = list()
  
  lcpars[["asc_car"]] = list(asc_car_a, asc_car_b)
  lcpars[["asc_pt"]] = list(asc_pt_a, asc_pt_b)
  lcpars[["asc_ecar"]] = list(asc_ecar_a, asc_ecar_b)
  lcpars[["asc_ebike"]] = list(asc_ebike_a, asc_ebike_b)
  lcpars[["asc_escoot"]] = list(asc_escoot_a, asc_escoot_b)
  lcpars[["asc_aebike"]] = list(asc_aebike_a, asc_aebike_b)
  lcpars[["asc_aescoot"]] = list(asc_aescoot_a, asc_aescoot_b)
  lcpars[["asc_awalk"]] = list(asc_awalk_a, asc_awalk_b)
  lcpars[["b_car_ivtt"]] = list(car_ivtt_a, car_ivtt_b)
  lcpars[["b_car_egt"]] = list(car_egt_a, car_egt_b)
  lcpars[["b_car_tc"]] = list(car_tc_a, car_tc_b)
  lcpars[["b_car_pc"]] = list(car_pc_a, car_pc_b)
  lcpars[["b_pt_ivtt"]] = list(pt_ivtt_a, pt_ivtt_b)
  lcpars[["b_pt_act"]] = list(pt_act_a, pt_act_b)
  lcpars[["b_pt_egt"]] = list(pt_egt_a, pt_egt_b)
  lcpars[["b_pt_wt"]] = list(pt_wt_a, pt_wt_b)
  lcpars[["b_pt_tc"]] = list(pt_tc_a, pt_tc_b)
  lcpars[["b_ecar_ivtt"]] = list(ecar_ivtt_a, ecar_ivtt_b)
  lcpars[["b_ecar_act"]] = list(ecar_act_a, ecar_act_b)
  lcpars[["b_ecar_egt"]] = list(ecar_egt_a, ecar_egt_b)
  lcpars[["b_ecar_tc"]] = list(ecar_tc_a, ecar_tc_b)
  lcpars[["b_ecar_av"]] = list(ecar_av_a, ecar_av_b)
  lcpars[["b_ecar_wt"]] = list(ecar_wt_a, ecar_wt_b)
  lcpars[["b_ebike_ivtt"]] = list(ebike_ivtt_a, ebike_ivtt_b)
  lcpars[["b_ebike_act"]] = list(ebike_act_a, ebike_act_b)
  lcpars[["b_ebike_egt"]] = list(ebike_egt_a, ebike_egt_b)
  lcpars[["b_ebike_tc"]] = list(ebike_tc_a, ebike_tc_b)
  lcpars[["b_ebike_av"]] = list(ebike_av_a, ebike_av_b)
  lcpars[["b_ebike_wt"]] = list(ebike_wt_a, ebike_wt_b)
  lcpars[["b_escoot_ivtt"]] = list(escoot_ivtt_a, escoot_ivtt_b)
  lcpars[["b_escoot_act"]] = list(escoot_act_a, escoot_act_b)
  lcpars[["b_escoot_egt"]] = list(escoot_egt_a, escoot_egt_b)
  lcpars[["b_escoot_tc"]] = list(escoot_tc_a, escoot_tc_b)
  lcpars[["b_escoot_av"]] = list(escoot_av_a, escoot_av_b)
  lcpars[["b_escoot_wt"]] = list(escoot_wt_a, escoot_wt_b)
  lcpars[["b_aebike_ivtt"]] = list(aebike_ivtt_a, aebike_ivtt_b)
  lcpars[["b_aebike_wk"]] = list(aebike_wk_a, aebike_wk_b)
  lcpars[["b_aebike_tc"]] = list(aebike_tc_a, aebike_tc_b)
  lcpars[["b_aebike_av"]] = list(aebike_av_a, aebike_av_b)
  lcpars[["b_aebike_wt"]] = list(aebike_wt_a, aebike_wt_b)
  lcpars[["b_aescoot_ivtt"]] = list(aescoot_ivtt_a, aescoot_ivtt_b)
  lcpars[["b_aescoot_wk"]] = list(aescoot_wk_a, aescoot_wk_b)
  lcpars[["b_aescoot_tc"]] = list(aescoot_tc_a, aescoot_tc_b)
  lcpars[["b_aescoot_av"]] = list(aescoot_av_a, aescoot_av_b)
  lcpars[["b_aescoot_wt"]] = list(aescoot_wt_a, aescoot_wt_b)
  lcpars[["b_awalk"]] = list(awalk_a, awalk_b)
  lcpars[["lm_innv_car"]] = list(lm_innv_car_a, lm_innv_car_b)
  lcpars[["lm_skpt_car"]] = list(lm_skpt_car_a, lm_skpt_car_b)
  lcpars[["lm_risk_car"]] = list(lm_risk_car_a, lm_risk_car_b)
  lcpars[["lm_use_car"]] = list(lm_use_car_a, lm_use_car_b)
  lcpars[["lm_sn_car"]] = list(lm_sn_car_a, lm_sn_car_b)
  lcpars[["lm_env_car"]] = list(lm_env_car_a, lm_env_car_b)
  lcpars[["lm_innv_pt"]] = list(lm_innv_pt_a, lm_innv_pt_b)
  lcpars[["lm_skpt_pt"]] = list(lm_skpt_pt_a, lm_skpt_pt_b)
  lcpars[["lm_risk_pt"]] = list(lm_risk_pt_a, lm_risk_pt_b)
  lcpars[["lm_use_pt"]] = list(lm_use_pt_a, lm_use_pt_b)
  lcpars[["lm_sn_pt"]] = list(lm_sn_pt_a, lm_sn_pt_b)
  lcpars[["lm_env_pt"]] = list(lm_env_pt_a, lm_env_pt_b)
  lcpars[["lm_innv_ecar"]] = list(lm_innv_ecar_a, lm_innv_ecar_b)
  lcpars[["lm_skpt_ecar"]] = list(lm_skpt_ecar_a, lm_skpt_ecar_b)
  lcpars[["lm_risk_ecar"]] = list(lm_risk_ecar_a, lm_risk_ecar_b)
  lcpars[["lm_use_ecar"]] = list(lm_use_ecar_a, lm_use_ecar_b)
  lcpars[["lm_sn_ecar"]] = list(lm_sn_ecar_a, lm_sn_ecar_b)
  lcpars[["lm_env_ecar"]] = list(lm_env_ecar_a, lm_env_ecar_b)
  lcpars[["lm_innv_ebike"]] = list(lm_innv_ebike_a, lm_innv_ebike_b)
  lcpars[["lm_skpt_ebike"]] = list(lm_skpt_ebike_a, lm_skpt_ebike_b)
  lcpars[["lm_risk_ebike"]] = list(lm_risk_ebike_a, lm_risk_ebike_b)
  lcpars[["lm_use_ebike"]] = list(lm_use_ebike_a, lm_use_ebike_b)
  lcpars[["lm_sn_ebike"]] = list(lm_sn_ebike_a, lm_sn_ebike_b)
  lcpars[["lm_env_ebike"]] = list(lm_env_ebike_a, lm_env_ebike_b)
  lcpars[["lm_innv_escoot"]] = list(lm_innv_escoot_a, lm_innv_escoot_b)
  lcpars[["lm_skpt_escoot"]] = list(lm_skpt_escoot_a, lm_skpt_escoot_b)
  lcpars[["lm_risk_escoot"]] = list(lm_risk_escoot_a, lm_risk_escoot_b)
  lcpars[["lm_use_escoot"]] = list(lm_use_escoot_a, lm_use_escoot_b)
  lcpars[["lm_sn_escoot"]] = list(lm_sn_escoot_a, lm_sn_escoot_b)
  lcpars[["lm_env_escoot"]] = list(lm_env_escoot_a, lm_env_escoot_b)
  lcpars[["lm_innv_aebike"]] = list(lm_innv_aebike_a, lm_innv_aebike_b)
  lcpars[["lm_skpt_aebike"]] = list(lm_skpt_aebike_a, lm_skpt_aebike_b)
  lcpars[["lm_risk_aebike"]] = list(lm_risk_aebike_a, lm_risk_aebike_b)
  lcpars[["lm_use_aebike"]] = list(lm_use_aebike_a, lm_use_aebike_b)
  lcpars[["lm_sn_aebike"]] = list(lm_sn_aebike_a, lm_sn_aebike_b)
  lcpars[["lm_env_aebike"]] = list(lm_env_aebike_a, lm_env_aebike_b)
  lcpars[["lm_innv_aescoot"]] = list(lm_innv_aescoot_a, lm_innv_aescoot_b)
  lcpars[["lm_skpt_aescoot"]] = list(lm_skpt_aescoot_a, lm_skpt_aescoot_b)
  lcpars[["lm_risk_aescoot"]] = list(lm_risk_aescoot_a, lm_risk_aescoot_b)
  lcpars[["lm_use_aescoot"]] = list(lm_use_aescoot_a, lm_use_aescoot_b)
  lcpars[["lm_sn_aescoot"]] = list(lm_sn_aescoot_a, lm_sn_aescoot_b)
  lcpars[["lm_env_aescoot"]] = list(lm_env_aescoot_a, lm_env_aescoot_b)
  lcpars[["lm_risk_awalk"]] = list(lm_risk_awalk_a, lm_risk_awalk_b)
  lcpars[["lm_use_awalk"]] = list(lm_use_awalk_a, lm_use_awalk_b)
  
  ## Class segmentation model 
  V = list()
  
  V[["class_a"]] = delta_a + gm_age1_a*(age==1) + gm_age2_a*(age==3) + gm_age3_a*(age==5) + gm_female_a*female + gm_hhinc1_a*(hhinc==1) + gm_hhinc2_a*(hhinc==3) + gm_hhinc3_a*(hhinc==5) + 
    gm_ncar0_a*(ncar==0) + gm_ncar1_a*(ncar==1) + gm_ncar2_a*(ncar==2) + gm_nbic0_a*(nbic==0) + gm_nbic1_a*(nbic==1) + gm_nbic2_a*(nbic==2) + gm_hhC_a*hhC + lm_hab_a*hab
  V[["class_b"]] = delta_b + gm_age1_b*(age==1) + gm_age2_b*(age==3) + gm_age3_b*(age==5) + gm_female_b*female + gm_hhinc1_b*(hhinc==1) + gm_hhinc2_b*(hhinc==3) + gm_hhinc3_b*(hhinc==5) + 
    gm_ncar0_b*(ncar==0) + gm_ncar1_b*(ncar==1) + gm_ncar2_b*(ncar==2) + gm_nbic0_b*(nbic==0) + gm_nbic1_b*(nbic==1) + gm_nbic2_b*(nbic==2) + gm_hhC_b*hhC + lm_hab_b*hab
  # V[["class_c"]] = delta_c + gm_age1_c*(age==1) + gm_age2_c*(age==3) + gm_age3_c*(age==5) + gm_female_c*female + gm_hhinc1_c*(hhinc==1) + gm_hhinc2_c*(hhinc==3) + gm_hhinc3_c*(hhinc==5) + 
  #   gm_ncar0_c*(ncar==0) + gm_ncar1_c*(ncar==1) + gm_ncar2_c*(ncar==2) + gm_nbic0_c*(nbic==0) + gm_nbic1_c*(nbic==1) + gm_nbic2_c*(nbic==2) + gm_hhC_c*hhC + lm_hab_c*hab
  
  ## Class allocation settings
  classAlloc_settings = list(
    classes = c(class_a = 1, class_b = 2),
    utilities = V
  )
  
  lcpars[["pi_values"]] = apollo_classAlloc(classAlloc_settings)
  
  return(lcpars)
}

## Group and Validate inputs

apollo_inputs = apollo_validateInputs()

## Define model and likelihood function 

apollo_probabilities = function(apollo_beta, apollo_inputs, functionality = "estimate") {
  
  ## Initialize
  apollo_attach(apollo_beta, apollo_inputs)
  on.exit(apollo_detach(apollo_beta, apollo_inputs))
  
  ## Creating LVs
  
  innv = gamma_female_innv*female + gamma_age1_innv*(age==1) + gamma_age2_innv*(age==3) + gamma_age3_innv*(age==5) + gamma_hhinc1_innv*(hhinc==1) + gamma_hhinc2_innv*(hhinc==3) + gamma_hhinc3_innv*(hhinc==5) + gamma_grad_innv*edu + eta1
  skpt = gamma_female_skpt*female + gamma_age1_skpt*(age==1) + gamma_age2_skpt*(age==3) + gamma_age3_skpt*(age==5) + gamma_hhinc1_skpt*(hhinc==1) + gamma_hhinc2_skpt*(hhinc==3) + gamma_hhinc3_skpt*(hhinc==5) + gamma_grad_skpt*edu + eta2
  risk = gamma_female_risk*female + gamma_age1_risk*(age==1) + gamma_age2_risk*(age==3) + gamma_age3_risk*(age==5) + gamma_hhinc1_risk*(hhinc==1) + gamma_hhinc2_risk*(hhinc==3) + gamma_hhinc3_risk*(hhinc==5) + gamma_grad_risk*edu + eta3
  use = gamma_female_use*female + gamma_age1_use*(age==1) + gamma_age2_use*(age==3) + gamma_age3_use*(age==5) + gamma_hhinc1_use*(hhinc==1) + gamma_hhinc2_use*(hhinc==3) + gamma_hhinc3_use*(hhinc==5) + gamma_grad_use*edu + eta4
  sn = gamma_female_sn*female + gamma_age1_sn*(age==1) + gamma_age2_sn*(age==3) + gamma_age3_sn*(age==5) + gamma_hhinc1_sn*(hhinc==1) + gamma_hhinc2_sn*(hhinc==3) + gamma_hhinc3_sn*(hhinc==5) + gamma_grad_sn*edu + eta5
  env = gamma_female_env*female + gamma_age1_env*(age==1) + gamma_age2_env*(age==3) + gamma_age3_env*(age==5) + gamma_hhinc1_env*(hhinc==1) + gamma_hhinc2_env*(hhinc==3) + gamma_hhinc3_env*(hhinc==5) + gamma_grad_env*edu + eta6
  
  # Creating list of probabilities P
  
  P = list()
  
  ## Likelihood of indicators to LVs
  
  ol_settings1 = list(outcomeOrdered = att1, 
                      V = zeta_innv1*innv,
                      tau = list(tau_innv1_1, tau_innv1_2, tau_innv1_3, tau_innv1_4),
                      rows = (task==1),
                      componentName = "indic_innv1")
  ol_settings2 = list(outcomeOrdered = att2, 
                      V = zeta_innv2*innv,
                      tau = list(tau_innv2_1, tau_innv2_2, tau_innv2_3, tau_innv2_4),
                      rows = (task==1),
                      componentName = "indic_innv2")
  ol_settings3 = list(outcomeOrdered = att3, 
                      V = zeta_innv3*innv,
                      tau = list(tau_innv3_1, tau_innv3_2, tau_innv3_3, tau_innv3_4),
                      rows = (task==1),
                      componentName = "indic_innv3")
  ol_settings4 = list(outcomeOrdered = att4, 
                      V = zeta_skpt1*skpt,
                      tau = list(tau_skpt1_1, tau_skpt1_2, tau_skpt1_3, tau_skpt1_4),
                      rows = (task==1),
                      componentName = "indic_skpt1")
  ol_settings5 = list(outcomeOrdered = att5, 
                      V = zeta_skpt2*skpt,
                      tau = list(tau_skpt2_1, tau_skpt2_2, tau_skpt2_3, tau_skpt2_4),
                      rows = (task==1),
                      componentName = "indic_skpt2")
  ol_settings6 = list(outcomeOrdered = att10, 
                      V = zeta_skpt3*skpt,
                      tau = list(tau_skpt3_1, tau_skpt3_2, tau_skpt3_3, tau_skpt3_4),
                      rows = (task==1),
                      componentName = "indic_skpt3")
  ol_settings7 = list(outcomeOrdered = att11, 
                      V = zeta_risk1*risk,
                      tau = list(tau_risk1_1, tau_risk1_2, tau_risk1_3, tau_risk1_4),
                      rows = (task==1),
                      componentName = "indic_risk1")
  ol_settings8 = list(outcomeOrdered = att13, 
                      V = zeta_risk2*risk,
                      tau = list(tau_risk2_1, tau_risk2_2, tau_risk2_3, tau_risk2_4),
                      rows = (task==1),
                      componentName = "indic_risk2")
  ol_settings9 = list(outcomeOrdered = att14, 
                      V = zeta_risk3*risk,
                      tau = list(tau_risk3_1, tau_risk3_2, tau_risk3_3, tau_risk3_4),
                      rows = (task==1),
                      componentName = "indic_risk3")
  ol_settings10 = list(outcomeOrdered = att8, 
                       V = zeta_use1*use,
                       tau = list(tau_use1_1, tau_use1_2, tau_use1_3, tau_use1_4),
                       rows = (task==1),
                       componentName = "indic_use1")
  ol_settings11 = list(outcomeOrdered = att16, 
                       V = zeta_use2*use,
                       tau = list(tau_use2_1, tau_use2_2, tau_use2_3, tau_use2_4),
                       rows = (task==1),
                       componentName = "indic_use2")
  ol_settings12 = list(outcomeOrdered = att17, 
                       V = zeta_use3*use,
                       tau = list(tau_use3_1, tau_use3_2, tau_use3_3, tau_use3_4),
                       rows = (task==1),
                       componentName = "indic_use3")
  ol_settings13 = list(outcomeOrdered = att18, 
                       V = zeta_use4*use,
                       tau = list(tau_use4_1, tau_use4_2, tau_use4_3, tau_use4_4),
                       rows = (task==1),
                       componentName = "indic_use4")
  ol_settings14 = list(outcomeOrdered = att19, 
                       V = zeta_use5*use,
                       tau = list(tau_use5_1, tau_use5_2, tau_use5_3, tau_use5_4),
                       rows = (task==1),
                       componentName = "indic_use5")
  ol_settings15 = list(outcomeOrdered = att21, 
                       V = zeta_sn1*sn,
                       tau = list(tau_sn1_1, tau_sn1_2, tau_sn1_3, tau_sn1_4),
                       rows = (task==1),
                       componentName = "indic_sn1")
  ol_settings16 = list(outcomeOrdered = att22, 
                       V = zeta_sn2*sn,
                       tau = list(tau_sn2_1, tau_sn2_2, tau_sn2_3, tau_sn2_4),
                       rows = (task==1),
                       componentName = "indic_sn2")
  ol_settings17 = list(outcomeOrdered = att23, 
                       V = zeta_env1*env,
                       tau = list(tau_env1_1, tau_env1_2, tau_env1_3, tau_env1_4),
                       rows = (task==1),
                       componentName = "indic_env1")
  ol_settings18 = list(outcomeOrdered = att24, 
                       V = zeta_env2*env,
                       tau = list(tau_env2_1, tau_env2_2, tau_env2_3, tau_env2_4),
                       rows = (task==1),
                       componentName = "indic_env2")
  ol_settings19 = list(outcomeOrdered = att25, 
                       V = zeta_env3*env,
                       tau = list(tau_env3_1, tau_env3_2, tau_env3_3, tau_env3_4),
                       rows = (task==1),
                       componentName = "indic_env3")
  ol_settings20 = list(outcomeOrdered = hab1, 
                       V = zeta_hab1*hab,
                       tau = list(tau_hab1_1, tau_hab1_2, tau_hab1_3, tau_hab1_4),
                       rows = (task==1),
                       componentName = "indic_hab1")
  ol_settings21 = list(outcomeOrdered = hab2, 
                       V = zeta_hab2*hab,
                       tau = list(tau_hab2_1, tau_hab2_2, tau_hab2_3, tau_hab2_4),
                       rows = (task==1),
                       componentName = "indic_hab2")
  ol_settings22 = list(outcomeOrdered = hab3, 
                       V = zeta_hab3*hab,
                       tau = list(tau_hab3_1, tau_hab3_2, tau_hab3_3, tau_hab3_4),
                       rows = (task==1),
                       componentName = "indic_hab3")
  ol_settings23 = list(outcomeOrdered = hab4, 
                       V = zeta_hab4*hab,
                       tau = list(tau_hab4_1, tau_hab4_2, tau_hab4_3, tau_hab4_4),
                       rows = (task==1),
                       componentName = "indic_hab4")
  ol_settings24 = list(outcomeOrdered = hab5, 
                       V = zeta_hab5*hab,
                       tau = list(tau_hab5_1, tau_hab5_2, tau_hab5_3, tau_hab5_4),
                       rows = (task==1),
                       componentName = "indic_hab5")
  
  P[["indic_innv1"]] = apollo_ol(ol_settings1, functionality)
  P[["indic_innv2"]] = apollo_ol(ol_settings2, functionality)
  P[["indic_innv3"]] = apollo_ol(ol_settings3, functionality)
  P[["indic_skpt1"]] = apollo_ol(ol_settings4, functionality)
  P[["indic_skpt2"]] = apollo_ol(ol_settings5, functionality)
  P[["indic_skpt3"]] = apollo_ol(ol_settings6, functionality)
  P[["indic_risk1"]] = apollo_ol(ol_settings7, functionality)
  P[["indic_risk2"]] = apollo_ol(ol_settings8, functionality)
  P[["indic_risk3"]] = apollo_ol(ol_settings9, functionality)
  P[["indic_use1"]] = apollo_ol(ol_settings10, functionality)
  P[["indic_use2"]] = apollo_ol(ol_settings11, functionality)
  P[["indic_use3"]] = apollo_ol(ol_settings12, functionality)
  P[["indic_use4"]] = apollo_ol(ol_settings13, functionality)
  P[["indic_use5"]] = apollo_ol(ol_settings14, functionality)
  P[["indic_sn1"]] = apollo_ol(ol_settings15, functionality)
  P[["indic_sn2"]] = apollo_ol(ol_settings16, functionality)
  P[["indic_env1"]] = apollo_ol(ol_settings17, functionality)
  P[["indic_env2"]] = apollo_ol(ol_settings18, functionality)
  P[["indic_env3"]] = apollo_ol(ol_settings19, functionality)
  P[["indic_hab1"]] = apollo_ol(ol_settings20, functionality)
  P[["indic_hab2"]] = apollo_ol(ol_settings21, functionality)
  P[["indic_hab3"]] = apollo_ol(ol_settings22, functionality)
  P[["indic_hab4"]] = apollo_ol(ol_settings23, functionality)
  P[["indic_hab5"]] = apollo_ol(ol_settings24, functionality)
  
  P[["indic_innv1"]] = apollo_panelProd(P[["indic_innv1"]], apollo_inputs, functionality)
  P[["indic_innv2"]] = apollo_panelProd(P[["indic_innv2"]], apollo_inputs, functionality)
  P[["indic_innv3"]] = apollo_panelProd(P[["indic_innv3"]], apollo_inputs, functionality)
  P[["indic_skpt1"]] = apollo_panelProd(P[["indic_skpt1"]], apollo_inputs, functionality)
  P[["indic_skpt2"]] = apollo_panelProd(P[["indic_skpt2"]], apollo_inputs, functionality)
  P[["indic_skpt3"]] = apollo_panelProd(P[["indic_skpt3"]], apollo_inputs, functionality)
  P[["indic_risk1"]] = apollo_panelProd(P[["indic_risk1"]], apollo_inputs, functionality)
  P[["indic_risk2"]] = apollo_panelProd(P[["indic_risk2"]], apollo_inputs, functionality) 
  P[["indic_risk3"]] = apollo_panelProd(P[["indic_risk3"]], apollo_inputs, functionality)
  P[["indic_use1"]] = apollo_panelProd(P[["indic_use1"]], apollo_inputs, functionality)
  P[["indic_use2"]] = apollo_panelProd(P[["indic_use2"]], apollo_inputs, functionality)
  P[["indic_use3"]] = apollo_panelProd(P[["indic_use3"]], apollo_inputs, functionality)
  P[["indic_use4"]] = apollo_panelProd(P[["indic_use4"]], apollo_inputs, functionality)
  P[["indic_use5"]] = apollo_panelProd(P[["indic_use5"]], apollo_inputs, functionality)
  P[["indic_sn1"]] = apollo_panelProd(P[["indic_sn1"]], apollo_inputs, functionality)
  P[["indic_sn2"]] = apollo_panelProd(P[["indic_sn2"]], apollo_inputs, functionality)
  P[["indic_env1"]] = apollo_panelProd(P[["indic_env1"]], apollo_inputs, functionality)
  P[["indic_env2"]] = apollo_panelProd(P[["indic_env2"]], apollo_inputs, functionality)
  P[["indic_env3"]] = apollo_panelProd(P[["indic_env3"]], apollo_inputs, functionality)
  P[["indic_hab1"]] = apollo_panelProd(P[["indic_hab1"]], apollo_inputs, functionality)
  P[["indic_hab2"]] = apollo_panelProd(P[["indic_hab2"]], apollo_inputs, functionality)
  P[["indic_hab3"]] = apollo_panelProd(P[["indic_hab3"]], apollo_inputs, functionality)
  P[["indic_hab4"]] = apollo_panelProd(P[["indic_hab4"]], apollo_inputs, functionality)
  P[["indic_hab5"]] = apollo_panelProd(P[["indic_hab5"]], apollo_inputs, functionality)
  
  ## Compute class-specific utilities in choice sub-model
  ## Loop over classes
  
  for (s in 1:2) {
    V = list()
    
    V[["car"]] = asc_car[[s]] + b_car_ivtt[[s]]*car_ivtt + b_car_egt[[s]]*car_egt + b_car_tc[[s]]*car_tc + b_car_pc[[s]]*car_pc + 
      lm_innv_car[[s]]*innv + lm_skpt_car[[s]]*skpt + lm_risk_car[[s]]*risk + lm_use_car[[s]]*use + lm_sn_car[[s]]*sn + lm_env_car[[s]]*env 
    V[["pt"]] = asc_pt[[s]] + b_pt_ivtt[[s]]*pt_ivtt + b_pt_act[[s]]*pt_act + b_pt_egt[[s]]*pt_egt + b_pt_wt[[s]]*pt_wt + b_pt_tc[[s]]*pt_tc +
      lm_innv_pt[[s]]*innv + lm_skpt_pt[[s]]*skpt + lm_risk_pt[[s]]*risk + lm_use_pt[[s]]*use + lm_sn_pt[[s]]*sn + lm_env_pt[[s]]*env 
    V[["ecar"]] = asc_ecar[[s]] + b_ecar_ivtt[[s]]*ecar_ivtt + b_ecar_act[[s]]*ecar_act + b_ecar_egt[[s]]*ecar_egt + b_ecar_wt[[s]]*ecar_wt + b_ecar_tc[[s]]*ecar_tc + b_ecar_av[[s]]*ecar_av +
      lm_innv_ecar[[s]]*innv + lm_skpt_ecar[[s]]*skpt + lm_risk_ecar[[s]]*risk + lm_use_ecar[[s]]*use + lm_sn_ecar[[s]]*sn + lm_env_ecar[[s]]*env 
    V[["ebike"]] = asc_ebike[[s]] + b_ebike_ivtt[[s]]*ebike_ivtt + b_ebike_act[[s]]*ebike_act + b_ebike_egt[[s]]*ebike_egt + b_ebike_wt[[s]]*ebike_wt + b_ebike_tc[[s]]*ebike_tc + b_ebike_av[[s]]*ebike_av +
      lm_innv_ebike[[s]]*innv + lm_skpt_ebike[[s]]*skpt + lm_risk_ebike[[s]]*risk + lm_use_ebike[[s]]*use + lm_sn_ebike[[s]]*sn + lm_env_ebike[[s]]*env 
    V[["escoot"]] = asc_escoot[[s]] + b_escoot_ivtt[[s]]*escoot_ivtt + b_escoot_act[[s]]*escoot_act + b_escoot_egt[[s]]*escoot_egt + b_escoot_wt[[s]]*escoot_wt + b_escoot_tc[[s]]*escoot_tc + b_escoot_av[[s]]*escoot_av +
      lm_innv_escoot[[s]]*innv + lm_skpt_escoot[[s]]*skpt + lm_risk_escoot[[s]]*risk + lm_use_escoot[[s]]*use + lm_sn_escoot[[s]]*sn + lm_env_escoot[[s]]*env 
    V[["aebike"]] = asc_aebike[[s]] + b_aebike_ivtt[[s]]*aebike_ivtt + b_aebike_wk[[s]]*aebike_wk + b_aebike_wt[[s]]*aebike_wt + b_aebike_tc[[s]]*aebike_tc + b_aebike_av[[s]]*aebike_av +
      lm_innv_aebike[[s]]*innv + lm_skpt_aebike[[s]]*skpt + lm_risk_aebike[[s]]*risk + lm_use_aebike[[s]]*use + lm_sn_aebike[[s]]*sn + lm_env_aebike[[s]]*env 
    V[["aescoot"]] = asc_aescoot[[s]] + b_aescoot_ivtt[[s]]*aescoot_ivtt + b_aescoot_wk[[s]]*aescoot_wk + b_aescoot_wt[[s]]*aescoot_wt + b_aescoot_tc[[s]]*aescoot_tc + b_aescoot_av[[s]]*aescoot_av +
      lm_innv_aescoot[[s]]*innv + lm_skpt_aescoot[[s]]*skpt + lm_risk_aescoot[[s]]*risk + lm_use_aescoot[[s]]*use + lm_sn_aescoot[[s]]*sn + lm_env_aescoot[[s]]*env 
    V[["awalk"]] = asc_awalk[[s]] + b_awalk[[s]]*awalk + lm_risk_awalk[[s]]*risk + lm_use_awalk[[s]]*use
    
    ## Settings for MNL model component
    mnl_settings = list(
      alternatives = c(car=1, pt=2, ecar=3, ebike=4, escoot=5, aebike=6, aescoot=7, awalk=8), 
      avail = list(car=av_car, pt=av_pt, ecar=av_ecar, ebike=av_ebike, escoot=av_escoot, aebike=av_aebike, aescoot=av_aescoot, awalk=av_awalk), 
      choiceVar = mode,
      utilities = V,
      componentName = paste0("class_", s)
    )
    
    ## Compute within-class choice probabilities using MNL
    P[[paste0("class_",s)]] = apollo_mnl(mnl_settings, functionality)
    
    ## Product across observations for same ID
    P[[paste0("class_",s)]] = apollo_panelProd(P[[paste0("class_",s)]], apollo_inputs, functionality)
  }
  
  ### Compute latent class model probabilities
  lc_settings  = list(inClassProb = P[paste0("class_", 1:2)], classProb=pi_values, componentName="choice")
  P[["choice"]] = apollo_lc(lc_settings, apollo_inputs, functionality)
  
  ### Comment out as necessary
  P = apollo_combineModels(P, apollo_inputs, functionality, components=c("indic_innv1", "indic_innv2", "indic_innv3", 
                                                                         "indic_skpt1", "indic_skpt2", "indic_skpt3",
                                                                         "indic_risk1", "indic_risk2", "indic_risk3",
                                                                         "indic_use1", "indic_use2", "indic_use3", "indic_use4", "indic_use5",
                                                                         "indic_sn1", "indic_sn2",
                                                                         "indic_env1", "indic_env2", "indic_env3",
                                                                         "indic_hab1", "indic_hab2", "indic_hab3", "indic_hab4", "indic_hab5", 
                                                                         "choice"))
  ## 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)
} 

## Calculate LL at starting values

apollo_llCalc(apollo_beta, apollo_probabilities, apollo_inputs)

## Model Estimation

model = apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, apollo_inputs, estimate_settings = list(maxIterations=1000))

## Model output

apollo_modelOutput(model)

apollo_saveOutput(model)

The initial results I can see are:

Code: Select all

final  value 29654.784732 
converged

Estimated parameters:
                     Estimate
asc_car_a            0.000000
car_ivtt_a          -0.403663
car_egt_a           -0.106567
car_tc_a            -0.356650
car_pc_a            -0.593426
lm_innv_car_a        0.000000
lm_skpt_car_a        0.000000
lm_risk_car_a        0.000000
lm_use_car_a         0.000000
lm_sn_car_a          0.000000
lm_env_car_a         0.000000
asc_pt_a            -8.371614
pt_ivtt_a           -0.281204
pt_act_a             0.139145
pt_egt_a            -2.083376
pt_wt_a             -0.354639
pt_tc_a              2.822185
lm_innv_pt_a         0.000000
lm_skpt_pt_a         0.000000
lm_risk_pt_a         0.000000
lm_use_pt_a          0.000000
lm_sn_pt_a           0.000000
lm_env_pt_a          0.000000
asc_ecar_a          10.548468
ecar_ivtt_a         -0.148799
ecar_act_a          -4.271748
ecar_egt_a          -0.186116
ecar_tc_a           -0.380282
ecar_av_a            0.036170
ecar_wt_a           -0.718559
lm_innv_ecar_a       0.000000
lm_skpt_ecar_a       0.000000
lm_risk_ecar_a       0.000000
lm_use_ecar_a        0.000000
lm_sn_ecar_a         0.000000
lm_env_ecar_a        0.000000
asc_ebike_a        -16.343402
ebike_ivtt_a         4.790125
ebike_act_a        -13.477655
ebike_egt_a          1.047121
ebike_tc_a          33.073094
ebike_av_a          -0.567727
ebike_wt_a         -15.057779
lm_innv_ebike_a      0.000000
lm_skpt_ebike_a      0.000000
lm_risk_ebike_a      0.000000
lm_use_ebike_a       0.000000
lm_sn_ebike_a        0.000000
lm_env_ebike_a       0.000000
asc_escoot_a        -1.726878
escoot_ivtt_a        0.526737
escoot_act_a         4.094076
escoot_egt_a       -21.173187
escoot_tc_a          5.111102
escoot_av_a          0.460357
escoot_wt_a         17.824858
lm_innv_escoot_a     0.000000
lm_skpt_escoot_a     0.000000
lm_risk_escoot_a     0.000000
lm_use_escoot_a      0.000000
lm_sn_escoot_a       0.000000
lm_env_escoot_a      0.000000
asc_aebike_a        -0.014579
aebike_ivtt_a       -0.511012
aebike_wk_a         -0.473866
aebike_tc_a         -0.905599
aebike_av_a          0.110548
aebike_wt_a         -0.908376
lm_innv_aebike_a     0.000000
lm_skpt_aebike_a     0.000000
lm_risk_aebike_a     0.000000
lm_use_aebike_a      0.000000
lm_sn_aebike_a       0.000000
lm_env_aebike_a      0.000000
asc_aescoot_a       -3.915401
aescoot_ivtt_a      -0.143161
aescoot_wk_a        -0.337634
aescoot_tc_a        -1.304077
aescoot_av_a         0.047112
aescoot_wt_a         0.125627
lm_innv_aescoot_a    0.000000
lm_skpt_aescoot_a    0.000000
lm_risk_aescoot_a    0.000000
lm_use_aescoot_a     0.000000
lm_sn_aescoot_a      0.000000
lm_env_aescoot_a     0.000000
asc_awalk_a          0.000000
awalk_a             -0.369069
lm_risk_awalk_a      0.000000
lm_use_awalk_a       0.000000
asc_car_b            0.000000
car_ivtt_b          -0.061964
car_egt_b           -0.049862
car_tc_b            -0.161234
car_pc_b            -0.243082
lm_innv_car_b        0.000000
lm_skpt_car_b        0.000000
lm_risk_car_b        0.000000
lm_use_car_b         0.000000
lm_sn_car_b          0.000000
lm_env_car_b         0.000000
asc_pt_b            -0.068008
pt_ivtt_b           -0.106423
pt_act_b            -0.037507
pt_egt_b            -0.086326
pt_wt_b             -0.080557
pt_tc_b              0.082268
lm_innv_pt_b         0.000000
lm_skpt_pt_b         0.000000
lm_risk_pt_b         0.000000
lm_use_pt_b          0.000000
lm_sn_pt_b           0.000000
lm_env_pt_b          0.000000
asc_ecar_b          -0.229641
ecar_ivtt_b         -0.095359
ecar_act_b          -0.041611
ecar_egt_b          -0.144088
ecar_tc_b           -0.249871
ecar_av_b            0.004606
ecar_wt_b           -0.036072
lm_innv_ecar_b       0.000000
lm_skpt_ecar_b       0.000000
lm_risk_ecar_b       0.000000
lm_use_ecar_b        0.000000
lm_sn_ecar_b         0.000000
lm_env_ecar_b        0.000000
asc_ebike_b         -0.136862
ebike_ivtt_b        -0.045792
ebike_act_b          0.014120
ebike_egt_b         -0.065301
ebike_tc_b          -0.511616
ebike_av_b          -0.010648
ebike_wt_b          -0.383772
lm_innv_ebike_b      0.000000
lm_skpt_ebike_b      0.000000
lm_risk_ebike_b      0.000000
lm_use_ebike_b       0.000000
lm_sn_ebike_b        0.000000
lm_env_ebike_b       0.000000
asc_escoot_b         4.411574
escoot_ivtt_b       -0.139691
escoot_act_b        -0.207376
escoot_egt_b        -0.269040
escoot_tc_b         -0.124885
escoot_av_b         -0.040926
escoot_wt_b         -0.586947
lm_innv_escoot_b     0.000000
lm_skpt_escoot_b     0.000000
lm_risk_escoot_b     0.000000
lm_use_escoot_b      0.000000
lm_sn_escoot_b       0.000000
lm_env_escoot_b      0.000000
asc_aebike_b        -3.741093
aebike_ivtt_b        0.111733
aebike_wk_b          0.012083
aebike_tc_b         -0.561805
aebike_av_b          0.021926
aebike_wt_b         -0.082681
lm_innv_aebike_b     0.000000
lm_skpt_aebike_b     0.000000
lm_risk_aebike_b     0.000000
lm_use_aebike_b      0.000000
lm_sn_aebike_b       0.000000
lm_env_aebike_b      0.000000
asc_aescoot_b       -4.663551
aescoot_ivtt_b      -0.249341
aescoot_wk_b        -0.032409
aescoot_tc_b        -0.072079
aescoot_av_b         0.045159
aescoot_wt_b         0.074601
lm_innv_aescoot_b    0.000000
lm_skpt_aescoot_b    0.000000
lm_risk_aescoot_b    0.000000
lm_use_aescoot_b     0.000000
lm_sn_aescoot_b      0.000000
lm_env_aescoot_b     0.000000
asc_awalk_b          0.000000
awalk_b             -0.034264
lm_risk_awalk_b      0.000000
lm_use_awalk_b       0.000000
delta_a             -3.163460
gm_female_a         -0.328585
gm_age1_a            1.290636
gm_age2_a            1.004727
gm_age3_a            0.000000
gm_hhinc1_a         -1.684520
gm_hhinc2_a         -0.149498
gm_hhinc3_a          0.000000
gm_ncar0_a           0.000000
gm_ncar1_a           0.202538
gm_ncar2_a           0.126651
gm_nbic0_a           0.000000
gm_nbic1_a           0.098099
gm_nbic2_a          -0.170477
gm_hhC_a             0.003141
lm_hab_a             0.123190
delta_b              0.000000
gm_female_b          0.000000
gm_age1_b            0.000000
gm_age2_b            0.000000
gm_age3_b            0.000000
gm_hhinc1_b          0.000000
gm_hhinc2_b          0.000000
gm_hhinc3_b          0.000000
gm_ncar0_b           0.000000
gm_ncar1_b           0.000000
gm_ncar2_b           0.000000
gm_nbic0_b           0.000000
gm_nbic1_b           0.000000
gm_nbic2_b           0.000000
gm_hhC_b             0.000000
lm_hab_b             0.000000
gamma_age1_innv      0.000000
gamma_age2_innv      0.000000
gamma_age3_innv      0.000000
gamma_hhinc1_innv    0.000000
gamma_hhinc2_innv    0.000000
gamma_hhinc3_innv    0.000000
gamma_grad_innv      0.000000
gamma_female_innv    0.000000
gamma_age1_skpt      0.000000
gamma_age2_skpt      0.000000
gamma_age3_skpt      0.000000
gamma_hhinc1_skpt    0.000000
gamma_hhinc2_skpt    0.000000
gamma_hhinc3_skpt    0.000000
gamma_grad_skpt      0.000000
gamma_female_skpt    0.000000
gamma_age1_risk      0.000000
gamma_age2_risk      0.000000
gamma_age3_risk      0.000000
gamma_hhinc1_risk    0.000000
gamma_hhinc2_risk    0.000000
gamma_hhinc3_risk    0.000000
gamma_grad_risk      0.000000
gamma_female_risk    0.000000
gamma_age1_use       0.000000
gamma_age2_use       0.000000
gamma_age3_use       0.000000
gamma_hhinc1_use     0.000000
gamma_hhinc2_use     0.000000
gamma_hhinc3_use     0.000000
gamma_grad_use       0.000000
gamma_female_use     0.000000
gamma_age1_sn        0.000000
gamma_age2_sn        0.000000
gamma_age3_sn        0.000000
gamma_hhinc1_sn      0.000000
gamma_hhinc2_sn      0.000000
gamma_hhinc3_sn      0.000000
gamma_grad_sn        0.000000
gamma_female_sn      0.000000
gamma_age1_env       0.000000
gamma_age2_env       0.000000
gamma_age3_env       0.000000
gamma_hhinc1_env     0.000000
gamma_hhinc2_env     0.000000
gamma_hhinc3_env     0.000000
gamma_grad_env       0.000000
gamma_female_env     0.000000
gamma_age1_hab       0.311939
gamma_age2_hab       0.119120
gamma_age3_hab       0.000000
gamma_hhinc1_hab    -0.164456
gamma_hhinc2_hab    -0.329104
gamma_hhinc3_hab     0.000000
gamma_grad_hab       0.169466
gamma_female_hab    -0.357677
gamma_ncar0          0.000000
gamma_ncar1         -0.080386
gamma_ncar2         -0.405700
gamma_nbic0          0.000000
gamma_nbic1          0.206535
gamma_nbic2          0.085154
zeta_innv1           0.000000
zeta_innv2           0.000000
zeta_innv3           0.000000
zeta_skpt1           0.000000
zeta_skpt2           0.000000
zeta_skpt3           0.000000
zeta_risk1           0.000000
zeta_risk2           0.000000
zeta_risk3           0.000000
zeta_use1            0.000000
zeta_use2            0.000000
zeta_use3            0.000000
zeta_use4            0.000000
zeta_use5            0.000000
zeta_sn1             0.000000
zeta_sn2             0.000000
zeta_env1            0.000000
zeta_env2            0.000000
zeta_env3            0.000000
zeta_hab1           -2.815868
zeta_hab2           -2.706638
zeta_hab3           -0.969271
zeta_hab4           -1.479420
zeta_hab5           -1.526375
tau_innv1_1         -3.513662
tau_innv1_2         -1.659840
tau_innv1_3         -0.448101
tau_innv1_4          1.609411
tau_innv2_1         -3.253810
tau_innv2_2         -1.458419
tau_innv2_3          0.082705
tau_innv2_4          1.968122
tau_innv3_1         -3.216016
tau_innv3_2         -1.690958
tau_innv3_3         -0.442341
tau_innv3_4          1.345462
tau_skpt1_1         -5.485787
tau_skpt1_2         -2.953069
tau_skpt1_3         -2.007099
tau_skpt1_4         -0.482985
tau_skpt2_1         -2.790269
tau_skpt2_2         -1.102287
tau_skpt2_3          0.137949
tau_skpt2_4          1.504082
tau_skpt3_1         -1.766281
tau_skpt3_2         -0.210092
tau_skpt3_3          0.583447
tau_skpt3_4          2.047287
tau_risk1_1         -1.722752
tau_risk1_2          0.187861
tau_risk1_3          1.659830
tau_risk1_4          3.513683
tau_risk2_1         -2.033757
tau_risk2_2         -0.038570
tau_risk2_3          1.184948
tau_risk2_4          2.868765
tau_risk3_1         -2.582875
tau_risk3_2         -0.781248
tau_risk3_3          0.277263
tau_risk3_4          2.161020
tau_use1_1          -2.088765
tau_use1_2          -0.459731
tau_use1_3           0.885631
tau_use1_4           2.647930
tau_use2_1          -1.845827
tau_use2_2          -0.367716
tau_use2_3           0.705553
tau_use2_4           2.501404
tau_use3_1          -2.924333
tau_use3_2          -1.560619
tau_use3_3          -0.154570
tau_use3_4           1.701490
tau_use4_1          -2.191119
tau_use4_2          -0.430785
tau_use4_3           0.872341
tau_use4_4           2.582892
tau_use5_1          -2.561964
tau_use5_2          -0.577512
tau_use5_3           0.571539
tau_use5_4           2.765250
tau_sn1_1           -2.074801
tau_sn1_2           -0.459723
tau_sn1_3            1.102277
tau_sn1_4            2.896190
tau_sn2_1           -3.253790
tau_sn2_2           -1.337071
tau_sn2_3            0.471345
tau_sn2_4            2.604150
tau_env1_1          -3.292987
tau_env1_2          -2.088764
tau_env1_3          -1.022867
tau_env1_4           1.200369
tau_env2_1          -3.563833
tau_env2_2          -2.175982
tau_env2_3          -1.037096
tau_env2_4           0.892317
tau_env3_1          -1.917867
tau_env3_2          -0.266024
tau_env3_3           1.303949
tau_env3_4           2.924322
tau_hab1_1          -8.865276
tau_hab1_2          -7.066860
tau_hab1_3          -5.139945
tau_hab1_4          -1.290712
tau_hab2_1          -9.038670
tau_hab2_2          -6.089578
tau_hab2_3          -4.124917
tau_hab2_4          -0.774950
tau_hab3_1          -5.851724
tau_hab3_2          -2.877534
tau_hab3_3          -1.427800
tau_hab3_4           0.397804
tau_hab4_1          -3.492639
tau_hab4_2          -1.221041
tau_hab4_3          -0.078460
tau_hab4_4           1.381377
tau_hab5_1          -4.461141
tau_hab5_2          -2.713751
tau_hab5_3          -1.179994
tau_hab5_4           0.771445
eta1                 0.000000
eta2                 0.000000
eta3                 0.000000
eta4                 0.000000
eta5                 0.000000
eta6                 0.000000

Final LL: -29654.7847


Summary of class allocation for model component choice:
         Mean prob.
class_1      0.1001
class_2      0.8999
If this method is wrong, in any way, please suggest how can I reduce the estimation time?
stephanehess
Site Admin
Posts: 1355
Joined: 24 Apr 2020, 16:29

Re: Fixed effects of Latent Variables in Latent Class Model

Post by stephanehess »

Hi

a latent variable without a random component is not a latent variable. You are trying to replace the random disturbance eta by a non-random term that would be a constant in the utility and becomes confounded with the thresholds in the OL model

This specification cannot really work or tell you anything, sorry

Stephane
--------------------------------
Stephane Hess
www.stephanehess.me.uk
Post Reply