Dummy vs. linear coding
Posted: 07 Feb 2023, 16:36
Dear Stephane,
I have a question on coding of attributes.
Our experiment has three attributes: A1 has only numerical levels, A2 and A3 have three numerical levels and one nominal level each.
In my first estimation approach I have dummy-coded A2 and A3.
We have now tried to separate A2 and A3 and estimate one linear parameter (for the three numerical levels) and one dummy-coded parameter (for the one nominal level) for A2 and A3 each.
Please find below the dummy coded and the linear/dummy coded approach.
Dummy coding:
# ################################################################# #
#### LOAD DATA AND APPLY ANY TRANSFORMATIONS ####
# ################################################################# #
Daten_Choice_Pivot <- read.csv("DatenApollo.csv", header = TRUE)
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==1)] <- 1.6
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==2)] <- 1.8
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==3)] <- 3.3
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==4)] <- 4.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==1)] <- 1.6
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==2)] <- 1.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==3)] <- 3.3
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==4)] <- 4.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==1)] <- 1.6
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==2)] <- 1.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==3)] <- 3.3
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==4)] <- 4.8
database = Daten_Choice_Pivot
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any kept fixed during estimation
apollo_beta = c(b0 = 0, b_Beitr = 0,
b_HoeheEEE300 = 0,
b_HoeheEEE600 = 0,
b_HoeheEEE900 = 0,
b_HoeheEEEunb = 0,
b_ZeitEEE12 = 0,
b_ZeitEEE42 = 0,
b_ZeitEEE72 = 0,
b_ZeitEEEunb = 0)
### Vector with parameter names (in quotes) to be kept fixed at
# their starting values during estimation.
# Use apollo_beta_fixed = c() if none
apollo_fixed = c("b_HoeheEEEunb", "b_ZeitEEEunb")
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs,
functionality="estimate"){
### Function initialisation: do not change the following three commands
### Attach and detach inputs, and create empty list of probabilities
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))
P = list()
### List of MNL utilities: must use the same names as in mnl_settings
V = list()
V[["SQ"]] = b0 + b_Beitr*Beitr_1 + b_HoeheEEE300*(HoeheEEE_1==1) + b_HoeheEEE600*(HoeheEEE_1==2) +
b_HoeheEEE900*(HoeheEEE_1==3)+ b_HoeheEEEunb*(HoeheEEE_1==4) + b_ZeitEEE12*(ZeitEEE_1==1) +
b_ZeitEEE42*(ZeitEEE_1==2) + b_ZeitEEE72*(ZeitEEE_1==3) + b_ZeitEEEunb*(ZeitEEE_1==4)
V[["RefA"]] = b_Beitr*Beitr_2 + b_HoeheEEE300*(HoeheEEE_2==1) + b_HoeheEEE600*(HoeheEEE_2==2) +
b_HoeheEEE900*(HoeheEEE_2==3)+ b_HoeheEEEunb*(HoeheEEE_2==4) + b_ZeitEEE12*(ZeitEEE_2==1) +
b_ZeitEEE42*(ZeitEEE_2==2) + b_ZeitEEE72*(ZeitEEE_2==3) + b_ZeitEEEunb*(ZeitEEE_2==4)
V[["RefB"]] = b_Beitr*Beitr_3 + b_HoeheEEE300*(HoeheEEE_3==1) + b_HoeheEEE600*(HoeheEEE_3==2) +
b_HoeheEEE900*(HoeheEEE_3==3)+ b_HoeheEEEunb*(HoeheEEE_3==4) + b_ZeitEEE12*(ZeitEEE_3==1) +
b_ZeitEEE42*(ZeitEEE_3==2) + b_ZeitEEE72*(ZeitEEE_3==3) + b_ZeitEEEunb*(ZeitEEE_3==4)
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(SQ=1, RefA=2, RefB=3),
choiceVar = Choice,
utilities = V
)
Linear/Dummy coding:)
# ################################################################# #
#### LOAD DATA AND APPLY ANY TRANSFORMATIONS ####
# ################################################################# #
Daten_Choice_Pivot <- read.csv("DatenApollo.csv", header = TRUE)
#Beitrag
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==1)] <- 1.6
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==2)] <- 1.8
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==3)] <- 3.3
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==4)] <- 4.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==1)] <- 1.6
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==2)] <- 1.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==3)] <- 3.3
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==4)] <- 4.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==1)] <- 1.6
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==2)] <- 1.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==3)] <- 3.3
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==4)] <- 4.8
# HoeheEEE
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==1)] <- 3
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==2)] <- 6
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==3)] <- 9
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_2 <- ifelse(Daten_Choice_Pivot$HoeheEEE_2==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==3, 9, 4)))
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_3 <- ifelse(Daten_Choice_Pivot$HoeheEEE_3==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==3, 9, 4)))
#ZeitEEE
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==3)] <- 7.2
database = Daten_Choice_Pivot
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any kept fixed during estimation
apollo_beta = c(b0 = 0,
b_Beitr = 0,
b_HoeheEEE = 0,
b_HoeheEEEunb = 0, # dummy
b_ZeitEEE = 0,
b_ZeitEEEunb = 0) # dummy
### Vector with parameter names (in quotes) to be kept fixed at
# their starting values during estimation.
# Use apollo_beta_fixed = c() if none
apollo_fixed = c() #"b_HoeheEEEunb", "b_ZeitEEEunb")
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs,
functionality="estimate"){
### Function initialisation: do not change the following three commands
### Attach and detach inputs, and create empty list of probabilities
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))
P = list()
### List of MNL utilities: must use the same names as in mnl_settings
V = list()
V[["SQ"]] = b0 + b_Beitr*Beitr_1 + b_HoeheEEE*HoeheEEE_1 + b_HoeheEEEunb*(HoeheEEE_1==4) + b_ZeitEEE*ZeitEEE_1 +
+ b_ZeitEEEunb*(ZeitEEE_1==4)
V[["RefA"]] = b_Beitr*Beitr_2 + b_HoeheEEE*(HoeheEEE_2==3|HoeheEEE_2==6|HoeheEEE_2==9)*HoeheEEE_2 + b_HoeheEEEunb*(HoeheEEE_2==4) + b_ZeitEEE*ZeitEEE_2 +
+ b_ZeitEEEunb*(ZeitEEE_2==4)
V[["RefB"]] = b_Beitr*Beitr_3 + b_HoeheEEE*(HoeheEEE_3==3|HoeheEEE_3==6|HoeheEEE_3==9)*HoeheEEE_3 + b_HoeheEEEunb*(HoeheEEE_3==4) + b_ZeitEEE*ZeitEEE_3 +
+ b_ZeitEEEunb*(ZeitEEE_3==4)
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(SQ=1, RefA=2, RefB=3),
choiceVar = Choice,
utilities = V
)
My questions are now:
1) Is this a reliable approach? And is there anything in the coding that doesn´t make sense to you?
2) We´ve also tried to estimate linear and squared parameters to check if squared parameters should be included in the estimation. If we estimate the following code, there is an error saying: “Error in apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, :
Parameter b_ZeitEEEunb does not influence the log-likelihood of your model!”
Do you see any error in the coding or can imagine why the error message occurs?
#Beitrag
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==1)] <- 1.6
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==2)] <- 1.8
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==3)] <- 3.3
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==4)] <- 4.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==1)] <- 1.6
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==2)] <- 1.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==3)] <- 3.3
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==4)] <- 4.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==1)] <- 1.6
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==2)] <- 1.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==3)] <- 3.3
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==4)] <- 4.8
# HoeheEEE
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==1)] <- 3
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==2)] <- 6
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==3)] <- 9
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_2 <- ifelse(Daten_Choice_Pivot$HoeheEEE_2==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==3, 9, 4)))
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_3 <- ifelse(Daten_Choice_Pivot$HoeheEEE_3==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==3, 9, 4)))
#ZeitEEE
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==3)] <- 7.2
database = Daten_Choice_Pivot
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any kept fixed during estimation
apollo_beta = c(b0 = 0,
b_Beitr = 0,
b_Beitr_sq = 0,
b_HoeheEEE = 0,
b_HoeheEEE_sq = 0,
b_HoeheEEEunb = 0, # dummy
b_ZeitEEE = 0,
b_ZeitEEE_sq = 0,
b_ZeitEEEunb = 0) # dummy
### Vector with parameter names (in quotes) to be kept fixed at
# their starting values during estimation.
# Use apollo_beta_fixed = c() if none
apollo_fixed = c() #"b_HoeheEEEunb", "b_ZeitEEEunb")
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs,
functionality="estimate"){
### Function initialisation: do not change the following three commands
### Attach and detach inputs, and create empty list of probabilities
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))
P = list()
### List of MNL utilities: must use the same names as in mnl_settings
V = list()
V[["SQ"]] = b0 + b_Beitr*Beitr_1 + b_Beitr_sq*Beitr_1^2 + b_HoeheEEE*HoeheEEE_1 + b_HoeheEEE_sq*HoeheEEE_1^2 + b_HoeheEEEunb*(HoeheEEE_1==4) + b_ZeitEEE*ZeitEEE_1 + b_ZeitEEE_sq*ZeitEEE_1^2
+ b_ZeitEEEunb*(ZeitEEE_1==4)
V[["RefA"]] = b_Beitr*Beitr_2 + b_Beitr_sq*Beitr_2^2 + b_HoeheEEE*(HoeheEEE_2==3|HoeheEEE_2==6|HoeheEEE_2==9)*HoeheEEE_2 + b_HoeheEEE_sq*(HoeheEEE_2==3|HoeheEEE_2==6|HoeheEEE_2==9)*HoeheEEE_2^2 + b_HoeheEEEunb*(HoeheEEE_2==4) + b_ZeitEEE*ZeitEEE_2 + b_ZeitEEE_sq*ZeitEEE_2^2
+ b_ZeitEEEunb*(ZeitEEE_2==4)
V[["RefB"]] = b_Beitr*Beitr_3 + b_Beitr_sq*Beitr_3^2 + b_HoeheEEE*(HoeheEEE_3==3|HoeheEEE_3==6|HoeheEEE_3==9)*HoeheEEE_3 + b_HoeheEEE_sq*(HoeheEEE_3==3|HoeheEEE_3==6|HoeheEEE_3==9)*HoeheEEE_3^2 + b_HoeheEEEunb*(HoeheEEE_3==4) + b_ZeitEEE*ZeitEEE_3 + b_ZeitEEE_sq*ZeitEEE_3^2
+ b_ZeitEEEunb*(ZeitEEE_3==4)
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(SQ=1, RefA=2, RefB=3),
choiceVar = Choice,
utilities = V
)
Thank you in advance for your advice!
Best,
Patrick
I have a question on coding of attributes.
Our experiment has three attributes: A1 has only numerical levels, A2 and A3 have three numerical levels and one nominal level each.
In my first estimation approach I have dummy-coded A2 and A3.
We have now tried to separate A2 and A3 and estimate one linear parameter (for the three numerical levels) and one dummy-coded parameter (for the one nominal level) for A2 and A3 each.
Please find below the dummy coded and the linear/dummy coded approach.
Dummy coding:
# ################################################################# #
#### LOAD DATA AND APPLY ANY TRANSFORMATIONS ####
# ################################################################# #
Daten_Choice_Pivot <- read.csv("DatenApollo.csv", header = TRUE)
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==1)] <- 1.6
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==2)] <- 1.8
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==3)] <- 3.3
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==4)] <- 4.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==1)] <- 1.6
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==2)] <- 1.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==3)] <- 3.3
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==4)] <- 4.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==1)] <- 1.6
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==2)] <- 1.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==3)] <- 3.3
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==4)] <- 4.8
database = Daten_Choice_Pivot
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any kept fixed during estimation
apollo_beta = c(b0 = 0, b_Beitr = 0,
b_HoeheEEE300 = 0,
b_HoeheEEE600 = 0,
b_HoeheEEE900 = 0,
b_HoeheEEEunb = 0,
b_ZeitEEE12 = 0,
b_ZeitEEE42 = 0,
b_ZeitEEE72 = 0,
b_ZeitEEEunb = 0)
### Vector with parameter names (in quotes) to be kept fixed at
# their starting values during estimation.
# Use apollo_beta_fixed = c() if none
apollo_fixed = c("b_HoeheEEEunb", "b_ZeitEEEunb")
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs,
functionality="estimate"){
### Function initialisation: do not change the following three commands
### Attach and detach inputs, and create empty list of probabilities
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))
P = list()
### List of MNL utilities: must use the same names as in mnl_settings
V = list()
V[["SQ"]] = b0 + b_Beitr*Beitr_1 + b_HoeheEEE300*(HoeheEEE_1==1) + b_HoeheEEE600*(HoeheEEE_1==2) +
b_HoeheEEE900*(HoeheEEE_1==3)+ b_HoeheEEEunb*(HoeheEEE_1==4) + b_ZeitEEE12*(ZeitEEE_1==1) +
b_ZeitEEE42*(ZeitEEE_1==2) + b_ZeitEEE72*(ZeitEEE_1==3) + b_ZeitEEEunb*(ZeitEEE_1==4)
V[["RefA"]] = b_Beitr*Beitr_2 + b_HoeheEEE300*(HoeheEEE_2==1) + b_HoeheEEE600*(HoeheEEE_2==2) +
b_HoeheEEE900*(HoeheEEE_2==3)+ b_HoeheEEEunb*(HoeheEEE_2==4) + b_ZeitEEE12*(ZeitEEE_2==1) +
b_ZeitEEE42*(ZeitEEE_2==2) + b_ZeitEEE72*(ZeitEEE_2==3) + b_ZeitEEEunb*(ZeitEEE_2==4)
V[["RefB"]] = b_Beitr*Beitr_3 + b_HoeheEEE300*(HoeheEEE_3==1) + b_HoeheEEE600*(HoeheEEE_3==2) +
b_HoeheEEE900*(HoeheEEE_3==3)+ b_HoeheEEEunb*(HoeheEEE_3==4) + b_ZeitEEE12*(ZeitEEE_3==1) +
b_ZeitEEE42*(ZeitEEE_3==2) + b_ZeitEEE72*(ZeitEEE_3==3) + b_ZeitEEEunb*(ZeitEEE_3==4)
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(SQ=1, RefA=2, RefB=3),
choiceVar = Choice,
utilities = V
)
Linear/Dummy coding:)
# ################################################################# #
#### LOAD DATA AND APPLY ANY TRANSFORMATIONS ####
# ################################################################# #
Daten_Choice_Pivot <- read.csv("DatenApollo.csv", header = TRUE)
#Beitrag
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==1)] <- 1.6
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==2)] <- 1.8
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==3)] <- 3.3
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==4)] <- 4.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==1)] <- 1.6
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==2)] <- 1.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==3)] <- 3.3
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==4)] <- 4.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==1)] <- 1.6
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==2)] <- 1.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==3)] <- 3.3
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==4)] <- 4.8
# HoeheEEE
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==1)] <- 3
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==2)] <- 6
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==3)] <- 9
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_2 <- ifelse(Daten_Choice_Pivot$HoeheEEE_2==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==3, 9, 4)))
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_3 <- ifelse(Daten_Choice_Pivot$HoeheEEE_3==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==3, 9, 4)))
#ZeitEEE
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==3)] <- 7.2
database = Daten_Choice_Pivot
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any kept fixed during estimation
apollo_beta = c(b0 = 0,
b_Beitr = 0,
b_HoeheEEE = 0,
b_HoeheEEEunb = 0, # dummy
b_ZeitEEE = 0,
b_ZeitEEEunb = 0) # dummy
### Vector with parameter names (in quotes) to be kept fixed at
# their starting values during estimation.
# Use apollo_beta_fixed = c() if none
apollo_fixed = c() #"b_HoeheEEEunb", "b_ZeitEEEunb")
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs,
functionality="estimate"){
### Function initialisation: do not change the following three commands
### Attach and detach inputs, and create empty list of probabilities
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))
P = list()
### List of MNL utilities: must use the same names as in mnl_settings
V = list()
V[["SQ"]] = b0 + b_Beitr*Beitr_1 + b_HoeheEEE*HoeheEEE_1 + b_HoeheEEEunb*(HoeheEEE_1==4) + b_ZeitEEE*ZeitEEE_1 +
+ b_ZeitEEEunb*(ZeitEEE_1==4)
V[["RefA"]] = b_Beitr*Beitr_2 + b_HoeheEEE*(HoeheEEE_2==3|HoeheEEE_2==6|HoeheEEE_2==9)*HoeheEEE_2 + b_HoeheEEEunb*(HoeheEEE_2==4) + b_ZeitEEE*ZeitEEE_2 +
+ b_ZeitEEEunb*(ZeitEEE_2==4)
V[["RefB"]] = b_Beitr*Beitr_3 + b_HoeheEEE*(HoeheEEE_3==3|HoeheEEE_3==6|HoeheEEE_3==9)*HoeheEEE_3 + b_HoeheEEEunb*(HoeheEEE_3==4) + b_ZeitEEE*ZeitEEE_3 +
+ b_ZeitEEEunb*(ZeitEEE_3==4)
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(SQ=1, RefA=2, RefB=3),
choiceVar = Choice,
utilities = V
)
My questions are now:
1) Is this a reliable approach? And is there anything in the coding that doesn´t make sense to you?
2) We´ve also tried to estimate linear and squared parameters to check if squared parameters should be included in the estimation. If we estimate the following code, there is an error saying: “Error in apollo_estimate(apollo_beta, apollo_fixed, apollo_probabilities, :
Parameter b_ZeitEEEunb does not influence the log-likelihood of your model!”
Do you see any error in the coding or can imagine why the error message occurs?
#Beitrag
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==1)] <- 1.6
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==2)] <- 1.8
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==3)] <- 3.3
Daten_Choice_Pivot$Beitr_1[which(Daten_Choice_Pivot$Beitr_1==4)] <- 4.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==1)] <- 1.6
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==2)] <- 1.8
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==3)] <- 3.3
Daten_Choice_Pivot$Beitr_2[which(Daten_Choice_Pivot$Beitr_2==4)] <- 4.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==1)] <- 1.6
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==2)] <- 1.8
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==3)] <- 3.3
Daten_Choice_Pivot$Beitr_3[which(Daten_Choice_Pivot$Beitr_3==4)] <- 4.8
# HoeheEEE
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==1)] <- 3
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==2)] <- 6
Daten_Choice_Pivot$HoeheEEE_1[which(Daten_Choice_Pivot$HoeheEEE_1==3)] <- 9
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_2[which(Daten_Choice_Pivot$HoeheEEE_2==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_2 <- ifelse(Daten_Choice_Pivot$HoeheEEE_2==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_2==3, 9, 4)))
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==1)] <- 3
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==2)] <- 6
#Daten_Choice_Pivot$HoeheEEE_3[which(Daten_Choice_Pivot$HoeheEEE_3==3)] <- 9
Daten_Choice_Pivot$HoeheEEE_3 <- ifelse(Daten_Choice_Pivot$HoeheEEE_3==1, 3,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==2, 6,
ifelse(Daten_Choice_Pivot$HoeheEEE_3==3, 9, 4)))
#ZeitEEE
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_1[which(Daten_Choice_Pivot$ZeitEEE_1==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_2[which(Daten_Choice_Pivot$ZeitEEE_2==3)] <- 7.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==1)] <- 1.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==2)] <- 4.2
Daten_Choice_Pivot$ZeitEEE_3[which(Daten_Choice_Pivot$ZeitEEE_3==3)] <- 7.2
database = Daten_Choice_Pivot
# ################################################################# #
#### DEFINE MODEL PARAMETERS ####
# ################################################################# #
### Vector of parameters, including any kept fixed during estimation
apollo_beta = c(b0 = 0,
b_Beitr = 0,
b_Beitr_sq = 0,
b_HoeheEEE = 0,
b_HoeheEEE_sq = 0,
b_HoeheEEEunb = 0, # dummy
b_ZeitEEE = 0,
b_ZeitEEE_sq = 0,
b_ZeitEEEunb = 0) # dummy
### Vector with parameter names (in quotes) to be kept fixed at
# their starting values during estimation.
# Use apollo_beta_fixed = c() if none
apollo_fixed = c() #"b_HoeheEEEunb", "b_ZeitEEEunb")
# ################################################################# #
#### GROUP AND VALIDATE INPUTS ####
# ################################################################# #
apollo_inputs = apollo_validateInputs()
# ################################################################# #
#### DEFINE MODEL AND LIKELIHOOD FUNCTION ####
# ################################################################# #
apollo_probabilities=function(apollo_beta, apollo_inputs,
functionality="estimate"){
### Function initialisation: do not change the following three commands
### Attach and detach inputs, and create empty list of probabilities
apollo_attach(apollo_beta, apollo_inputs)
on.exit(apollo_detach(apollo_beta, apollo_inputs))
P = list()
### List of MNL utilities: must use the same names as in mnl_settings
V = list()
V[["SQ"]] = b0 + b_Beitr*Beitr_1 + b_Beitr_sq*Beitr_1^2 + b_HoeheEEE*HoeheEEE_1 + b_HoeheEEE_sq*HoeheEEE_1^2 + b_HoeheEEEunb*(HoeheEEE_1==4) + b_ZeitEEE*ZeitEEE_1 + b_ZeitEEE_sq*ZeitEEE_1^2
+ b_ZeitEEEunb*(ZeitEEE_1==4)
V[["RefA"]] = b_Beitr*Beitr_2 + b_Beitr_sq*Beitr_2^2 + b_HoeheEEE*(HoeheEEE_2==3|HoeheEEE_2==6|HoeheEEE_2==9)*HoeheEEE_2 + b_HoeheEEE_sq*(HoeheEEE_2==3|HoeheEEE_2==6|HoeheEEE_2==9)*HoeheEEE_2^2 + b_HoeheEEEunb*(HoeheEEE_2==4) + b_ZeitEEE*ZeitEEE_2 + b_ZeitEEE_sq*ZeitEEE_2^2
+ b_ZeitEEEunb*(ZeitEEE_2==4)
V[["RefB"]] = b_Beitr*Beitr_3 + b_Beitr_sq*Beitr_3^2 + b_HoeheEEE*(HoeheEEE_3==3|HoeheEEE_3==6|HoeheEEE_3==9)*HoeheEEE_3 + b_HoeheEEE_sq*(HoeheEEE_3==3|HoeheEEE_3==6|HoeheEEE_3==9)*HoeheEEE_3^2 + b_HoeheEEEunb*(HoeheEEE_3==4) + b_ZeitEEE*ZeitEEE_3 + b_ZeitEEE_sq*ZeitEEE_3^2
+ b_ZeitEEEunb*(ZeitEEE_3==4)
### Define settings for MNL model component
mnl_settings = list(
alternatives = c(SQ=1, RefA=2, RefB=3),
choiceVar = Choice,
utilities = V
)
Thank you in advance for your advice!
Best,
Patrick