-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCA_without_price.R
208 lines (151 loc) · 6.87 KB
/
CA_without_price.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
# ################################################################# #
#### 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 ="MDCEV_CAHH_NoPrice",
modelDescr ="MDCEV model on mode and milage data, alpha-gamma profile with socio-demographics",
indivID ="HOUSEID"
)
# ################################################################# #
#### LOAD DATA ####
# ################################################################# #
database <- read.csv("/Users/taiebat/Box/Apollo Package/MDCEV/CAHHData.csv")
attach(database)
database$mileBudget <- car1+car2+car3plus+active+pubtransp+ridehail
detach(database)
sum(database$mileBudget <= 0)
database <- database %>%
filter(!(database$mileBudget <= 0))
sum(database$mileBudget <= 0)
database <- rbind(database,database)
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any that are kept fixed in estimation
apollo_beta = c(alpha_base = 0,
gamma_active = 1,
gamma_car1 = 1,
gamma_car2 = 1,
gamma_car3plus = 1,
gamma_pubtransp = 1,
gamma_ridehail = 1,
delta_active = 0,
delta_car1 = 0,
delta_car2 = 0,
delta_car3plus = 0,
delta_pubtransp = 0,
delta_ridehail = 0,
sigma = 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("sigma")
# ################################################################# #
#### 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()
### Define individual alternatives modes
alternatives = c("car1",
"car2",
"car3plus",
"active",
"pubtransp",
"ridehail")
### Define availabilities
avail = list(car1 = 1,
car2 = 1,
car3plus = 1,
active = 1,
pubtransp = 1,
ridehail = 1)
### Define continuous consumption for alternative modes
continuousChoice = list(car1 = car1,
car2 = car2,
car3plus = car3plus,
active = active,
pubtransp = pubtransp,
ridehail = ridehail)
### Define utilities for individual alternative modes
V = list()
V[["car1"]] = delta_car1
V[["car2"]] = delta_car2
V[["car3plus"]] = delta_car3plus
V[["active"]] = delta_active
V[["pubtransp"]] = delta_pubtransp
V[["ridehail"]] = delta_ridehail
### Define alpha parameters
alpha = list(car1 = 1 /(1 + exp(-alpha_base)),
car2 = 1 /(1 + exp(-alpha_base)),
car3plus = 1 /(1 + exp(-alpha_base)),
active = 1 /(1 + exp(-alpha_base)),
pubtransp = 1 /(1 + exp(-alpha_base)),
ridehail = 1 /(1 + exp(-alpha_base)))
### Define gamma parameters
gamma = list(car1 = gamma_car1,
car2 = gamma_car2,
car3plus = gamma_car3plus,
active = gamma_active,
pubtransp = gamma_pubtransp,
ridehail = gamma_ridehail)
### Define costs for individual alternatives
cost = list(car1 = 1,
car2 = 1,
car3plus = 1,
active = 1,
pubtransp = 1,
ridehail = 1)
### Define budget
budget = mileBudget
### Define settings for MDCEV model
mdcev_settings <- list(alternatives = alternatives,
avail = avail,
continuousChoice = continuousChoice,
V = V,
alpha = alpha,
gamma = gamma,
sigma = sigma,
cost = cost,
budget = budget)
### Compute probabilities using MDCEV model
P[["model"]] = apollo_mdcev(mdcev_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)
# ----------------------------------------------------------------- #
#---- MODEL PREDICTIONS ----
# ----------------------------------------------------------------- #
### Use the estimated model to make predictions
predictions_base = apollo_prediction(model, apollo_probabilities, apollo_inputs)
colMeans(predictions_base)