# ################################################################# # #### LOAD LIBRARY AND DEFINE CORE SETTINGS #### # ################################################################# # ### Clear memory rm(list = ls()) ### Load Apollo library library(apollo) ### Initialise code apollo_initialise() ### Set core controls apollo_control = list( modelName = "BW_simultaneous", modelDescr = "Best-worst model on drug choice data, simultaneous choice", indivID = "ID", outputDirectory = "output" ) # ################################################################# # #### LOAD DATA AND APPLY ANY TRANSFORMATIONS #### # ################################################################# # ### Loading data from package ### if data is to be loaded from a file (e.g. called data.csv), ### the code would be: database = read.csv("data.csv",header=TRUE) database = apollo_drugChoiceData ### for data dictionary, use ?apollo_drugChoiceData # ################################################################# # #### DEFINE MODEL PARAMETERS #### # ################################################################# # ### Vector of parameters, including any that are kept fixed in estimation apollo_beta = c(b_brand_Artemis = 0, b_brand_Novum = 0, b_brand_BestValue = 0, b_brand_Supermarket = 0, b_brand_PainAway = 0, b_country_CH = 0, b_country_DK = 0, b_country_USA = 0, b_country_IND = 0, b_country_RUS = 0, b_country_BRA = 0, b_char_standard = 0, b_char_fast = 0, b_char_double = 0, b_risk = 0, b_price = 0, mu_worst = 1) ### Vector with names (in quotes) of parameters to be kept fixed at their starting value in apollo_beta, use apollo_beta_fixed = c() if none apollo_fixed = c("b_brand_Artemis", "b_country_USA", "b_char_standard") # ################################################################# # #### GROUP AND VALIDATE INPUTS #### # ################################################################# # apollo_inputs = apollo_validateInputs() # ################################################################# # #### DEFINE MODEL AND LIKELIHOOD FUNCTION #### # ################################################################# # apollo_probabilities=function(apollo_beta, apollo_inputs, functionality="estimate"){ ### Attach inputs and detach after function exit apollo_attach(apollo_beta, apollo_inputs) on.exit(apollo_detach(apollo_beta, apollo_inputs)) ### Create list of probabilities P P = list() ### List of utilities: these must use the same names as in mnl_settings, order is irrelevant V = list() V[["alt1"]] = ( b_brand_Artemis*(brand_1=="Artemis") + b_brand_Novum*(brand_1=="Novum") + b_country_CH*(country_1=="Switzerland") + b_country_DK*(country_1=="Denmark") + b_country_USA*(country_1=="USA") + b_char_standard*(char_1=="standard") + b_char_fast*(char_1=="fast acting") + b_char_double*(char_1=="double strength") + b_risk*side_effects_1 + b_price*price_1) V[["alt2"]] = ( b_brand_Artemis*(brand_2=="Artemis") + b_brand_Novum*(brand_2=="Novum") + b_country_CH*(country_2=="Switzerland") + b_country_DK*(country_2=="Denmark") + b_country_USA*(country_2=="USA") + b_char_standard*(char_2=="standard") + b_char_fast*(char_2=="fast acting") + b_char_double*(char_2=="double strength") + b_risk*side_effects_2 + b_price*price_2) V[["alt3"]] = ( b_brand_BestValue*(brand_3=="BestValue") + b_brand_Supermarket*(brand_3=="Supermarket") + b_brand_PainAway*(brand_3=="PainAway") + b_country_USA*(country_3=="USA") + b_country_IND*(country_3=="India") + b_country_RUS*(country_3=="Russia") + b_country_BRA*(country_3=="Brazil") + b_char_standard*(char_3=="standard") + b_char_fast*(char_3=="fast acting") + b_risk*side_effects_3 + b_price*price_3 ) V[["alt4"]] = ( b_brand_BestValue*(brand_4=="BestValue") + b_brand_Supermarket*(brand_4=="Supermarket") + b_brand_PainAway*(brand_4=="PainAway") + b_country_USA*(country_4=="USA") + b_country_IND*(country_4=="India") + b_country_RUS*(country_4=="Russia") + b_country_BRA*(country_4=="Brazil") + b_char_standard*(char_4=="standard") + b_char_fast*(char_4=="fast acting") + b_risk*side_effects_4 + b_price*price_4 ) ### Compute probabilities for "best" choice using MNL model mnl_settings_best = list( alternatives = c(alt1=1, alt2=2, alt3=3, alt4=4), avail = list(alt1=1, alt2=1, alt3=1, alt4=1), choiceVar = best, utilities = V, componentName = "best" ) P[["choice_best"]] = apollo_mnl(mnl_settings_best, functionality) ### Compute probabilities for "worst" choice using MNL model mnl_settings = list( alternatives = c(alt_b1_w2=12, alt_b1_w3=13, alt_b1_w4=14, alt_b2_w1=21, alt_b2_w3=23, alt_b2_w4=24, alt_b3_w1=31, alt_b3_w2=32, alt_b3_w4=34, alt_b4_w1=41, alt_b4_w2=42, alt_b4_w3=43), choiceVar = 10*best+worst, utilities = list(alt_b1_w2=V[["alt1"]]-mu_worst*V[["alt2"]], alt_b1_w3=V[["alt1"]]-mu_worst*V[["alt3"]], alt_b1_w4=V[["alt1"]]-mu_worst*V[["alt4"]], alt_b2_w1=V[["alt2"]]-mu_worst*V[["alt1"]], alt_b2_w3=V[["alt2"]]-mu_worst*V[["alt3"]], alt_b2_w4=V[["alt2"]]-mu_worst*V[["alt4"]], alt_b3_w1=V[["alt3"]]-mu_worst*V[["alt1"]], alt_b3_w2=V[["alt3"]]-mu_worst*V[["alt2"]], alt_b3_w4=V[["alt3"]]-mu_worst*V[["alt4"]], alt_b4_w1=V[["alt4"]]-mu_worst*V[["alt1"]], alt_b4_w2=V[["alt4"]]-mu_worst*V[["alt2"]], alt_b4_w3=V[["alt4"]]-mu_worst*V[["alt3"]]) ) P[["model"]] = apollo_mnl(mnl_settings, functionality) ### Take product across observation for same individual P = apollo_panelProd(P, apollo_inputs, functionality) ### Prepare and return outputs of function P = apollo_prepareProb(P, apollo_inputs, functionality) return(P) } # ################################################################# # #### MODEL ESTIMATION #### # ################################################################# # model = apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, apollo_inputs) # ################################################################# # #### MODEL OUTPUTS #### # ################################################################# # # ----------------------------------------------------------------- # #---- FORMATTED OUTPUT (TO SCREEN) ---- # ----------------------------------------------------------------- # apollo_modelOutput(model) # ----------------------------------------------------------------- # #---- FORMATTED OUTPUT (TO FILE, using model name) ---- # ----------------------------------------------------------------- # apollo_saveOutput(model)