I modified "LC_with_covariates" in Example Files and tried to estimate bootstrap standard errors.
However, I got the following error message:
Error in apollo_preprocess(inputs = mnl_settings, modelType, functionality, : Each element of "utilities" for model component "Class_1" needs to be a scalar or a vector/matrix/cube with one row per observation in the "database"
I would appreciate it if you could tell me what is wrong with the following code.
Code: Select all
library(apollo)
apollo_initialise()
apollo_control = list(
modelName = "LC_with_covariates",
modelDescr = "LC model with covariates",
indivID = "ID",
nCores = 3,
outputDirectory = "output"
)
database = apollo_swissRouteChoiceData
apollo_beta = c(asc_1 = 0,
asc_2 = 0,
beta_tt_a = 0,
beta_tt_b = 0,
beta_tc_a = 0,
beta_tc_b = 0,
beta_hw_a =-0.0396,
beta_hw_b =-0.0479,
beta_ch_a =-0.7624,
beta_ch_b =-2.1725,
delta_a = 0.0329,
gamma_commute_a = 0,
gamma_car_av_a = 0,
delta_b = 0,
gamma_commute_b = 0,
gamma_car_av_b = 0)
apollo_fixed = c("asc_2","delta_b","gamma_commute_b","gamma_car_av_b")
apollo_lcPars=function(apollo_beta, apollo_inputs){
lcpars = list()
lcpars[["beta_tt"]] = list(beta_tt_a, beta_tt_b)
lcpars[["beta_tc"]] = list(beta_tc_a, beta_tc_b)
lcpars[["beta_hw"]] = list(beta_hw_a, beta_hw_b)
lcpars[["beta_ch"]] = list(beta_ch_a, beta_ch_b)
### Utilities of class allocation model
V=list()
V[["class_a"]] = delta_a + gamma_commute_a*commute + gamma_car_av_a*car_availability
V[["class_b"]] = delta_b + gamma_commute_b*commute + gamma_car_av_b*car_availability
### Settings for class allocation models
classAlloc_settings = list(
classes = c(class_a=1, class_b=2),
utilities = V
)
lcpars[["pi_values"]] = apollo_classAlloc(classAlloc_settings)
return(lcpars)
}
apollo_inputs = apollo_validateInputs()
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()
### Define settings for MNL model component that are generic across classes
mnl_settings = list(
alternatives = c(alt1=1, alt2=2),
avail = list(alt1=1, alt2=1),
choiceVar = choice
)
### Loop over classes
for(s in 1:2){
### Compute class-specific utilities
V=list()
V[["alt1"]] = asc_1 + beta_tc[[s]]*tc1 + beta_tt[[s]]*tt1 + beta_hw[[s]]*hw1 + beta_ch[[s]]*ch1
V[["alt2"]] = asc_2 + beta_tc[[s]]*tc2 + beta_tt[[s]]*tt2 + beta_hw[[s]]*hw2 + beta_ch[[s]]*ch2
mnl_settings$utilities = V
mnl_settings$componentName = paste0("Class_",s)
### Compute within-class choice probabilities using MNL model
P[[paste0("Class_",s)]] = apollo_mnl(mnl_settings, functionality)
### Take product across observation for same individual
P[[paste0("Class_",s)]] = apollo_panelProd(P[[paste0("Class_",s)]], apollo_inputs ,functionality)
}
### Compute latent class model probabilities
lc_settings = list(inClassProb = P, classProb=pi_values)
P[["model"]] = apollo_lc(lc_settings, apollo_inputs, functionality)
### Prepare and return outputs of function
P = apollo_prepareProb(P, apollo_inputs, functionality)
return(P)
}
model = apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, apollo_inputs,estimate_settings=list(bootstrapSE=30))
apollo_modelOutput(model, list(printPVal=2))