Hi,
I would like to know for an efficient design with two alternatives plus one opt-out option, whether my specification to the code below is correct or not. Specifically, I want to clarify whether:
1. It is sufficient to specify "alt3*" in the first row.
2. It is appropriate to include constant terms in both U (alt1) and U (alt2), i.e. b0[0] in U (alt1) and b1[0] in U (alt2)
3. it is correct to not including "U (alt3)" in the specification.
Design
; alts = alt1*, alt2*, alt3*
; rows = 24
; eff = (mnl, d)
; block = 3
; model:
U (alt1) = b0[0] + b1.dummy[0|0]*sp[1,2,3] + b2.dummy[0|0|0]*env[1,2,3,4] + b3.dummy[0|0|0]*travel[1,2,3,4] + b4.dummy[0]*advice[1,2] + b5.dummy[0|0|0]*wait[1,2,3,4] + b6.dummy[0]*leave[1,2] + b7.dummy[0|0|0]*cost[1,2,3,4] /
U (alt2) = b1[0]+ b1.dummy*sp + b2.dummy*env + b3.dummy*travel + b4.dummy*advice + b5.dummy*wait + b6.dummy*leave + b7.dummy*cost
$
Opt-out option
Moderators: Andrew Collins, Michiel Bliemer, johnr
-
- Posts: 2039
- Joined: Tue Mar 31, 2009 4:13 pm
Re: Opt-out option
1. Yes, this is correct, but you should remove the asterisk (*) because an opt-out alternative is a different type of attribute. So you need: ;alts = alt1*, alt2*, alt3
2. If alt1 and alt2 are generic, then you would typically use b0 for both alt1 and alt2.
3. Yes, this is correct. If it is not included then its utility defaults to 0. An alternative specification where you put the constant in the opt-out alternative is:
U(alt1) = b1.dummy etc /
U(alt2) = b1.dummy etc /
U(alt3) = b0
Michiel
2. If alt1 and alt2 are generic, then you would typically use b0 for both alt1 and alt2.
3. Yes, this is correct. If it is not included then its utility defaults to 0. An alternative specification where you put the constant in the opt-out alternative is:
U(alt1) = b1.dummy etc /
U(alt2) = b1.dummy etc /
U(alt3) = b0
Michiel
Re: Opt-out option
Hi Michiel,
Thank you for your help. That's mean it can also be written as the following if I am right. Thank you.
Design
; alts = alt1*, alt2*, alt3
; rows = 24
; eff = (mnl, d)
; block = 3
; model:
U (alt1) = b0[0] + b1.dummy etc /
U (alt2) = b0[0]+ b1.dummy etc /
$
Thank you for your help. That's mean it can also be written as the following if I am right. Thank you.
Design
; alts = alt1*, alt2*, alt3
; rows = 24
; eff = (mnl, d)
; block = 3
; model:
U (alt1) = b0[0] + b1.dummy etc /
U (alt2) = b0[0]+ b1.dummy etc /
$
-
- Posts: 2039
- Joined: Tue Mar 31, 2009 4:13 pm
Re: Opt-out option
Yes that is correct.
Re: Opt-out option
Hi Michiel,
May I ask a few follow-up questions:
1. Previously you mentioned that, "If alt1 and alt2 are generic, then you would typically use b0 for both alt1 and alt2." Could you clarify whether "generic" here means that Treatment A and Treatment B are identical except for differences in attribute levels? If so, the key comparison is between the treatment and the opt-out, so A and B would share the same constant?
2. I’m wondering: if we use the same constant for A and B in Ngene, would that imply we omit any position or label bias in the model? In other words, if we used different constants for A and B, we could see whether either A or B is more likely to be chosen relative to the opt-out, and also whether A is more consistently chosen than B. Do you have any advice on whether it’s more practical to use the same constant for A and B, or to use different constants?
3. If the unforced choice in my design is labeled as "neither A nor B" or "status quo (keep the current treatment)" instead—but I do not know the exact attributes of the current treatment—there should be something in alternative 3, not an empty option. In that case, since we cannot specify three constants for three alternatives for model identification, can I still use the same Ngene code regardless of what the "unforced choice" is? For example:
Design
; alts = alt1*, alt2*, alt3
; rows = 24
; eff = (mnl, d)
; block = 3
; model:
U(alt1) = b0[0] + b1.dummy etc /
U(alt2) = b0[0] + b1.dummy etc
$
4. Later, when I perform the mixed-logit analysis (e.g., using the Apollo package in R), is it true that regardless of the unforced choice, I only need to specify two constants for three utility functions, i.e.,
V[["treatmentA"]] = asc_a + …
V[["treatmentB"]] = asc_a + …
V[["unforced"]] = 0
I just need to decide whether treatments A and B share the same constant or not.
Thank you for your help.
May I ask a few follow-up questions:
1. Previously you mentioned that, "If alt1 and alt2 are generic, then you would typically use b0 for both alt1 and alt2." Could you clarify whether "generic" here means that Treatment A and Treatment B are identical except for differences in attribute levels? If so, the key comparison is between the treatment and the opt-out, so A and B would share the same constant?
2. I’m wondering: if we use the same constant for A and B in Ngene, would that imply we omit any position or label bias in the model? In other words, if we used different constants for A and B, we could see whether either A or B is more likely to be chosen relative to the opt-out, and also whether A is more consistently chosen than B. Do you have any advice on whether it’s more practical to use the same constant for A and B, or to use different constants?
3. If the unforced choice in my design is labeled as "neither A nor B" or "status quo (keep the current treatment)" instead—but I do not know the exact attributes of the current treatment—there should be something in alternative 3, not an empty option. In that case, since we cannot specify three constants for three alternatives for model identification, can I still use the same Ngene code regardless of what the "unforced choice" is? For example:
Design
; alts = alt1*, alt2*, alt3
; rows = 24
; eff = (mnl, d)
; block = 3
; model:
U(alt1) = b0[0] + b1.dummy etc /
U(alt2) = b0[0] + b1.dummy etc
$
4. Later, when I perform the mixed-logit analysis (e.g., using the Apollo package in R), is it true that regardless of the unforced choice, I only need to specify two constants for three utility functions, i.e.,
V[["treatmentA"]] = asc_a + …
V[["treatmentB"]] = asc_a + …
V[["unforced"]] = 0
I just need to decide whether treatments A and B share the same constant or not.
Thank you for your help.
-
- Posts: 2039
- Joined: Tue Mar 31, 2009 4:13 pm
Re: Opt-out option
1. Yes. With Treatment A and B, there is no reason why Treatment A would be more/less preferred than Treatment B if the attribute levels are the same. So that means that the constant for such generic alternatives should be the same (so either both 0 or both b0). Note that when using data from a choice experiment, during model estimation you would generally estimate different constants for Treatment A and B, where the difference in constants indicates whether there is a ordering effect (i.e., the left alternative is often more chosen than the right alternative, simply because it appears on the left). So in that case you would estimate:
V[["treatmentA"]] = asc_a + asc_b + …
V[["treatmentB"]] = asc_a + …
V[["unforced"]] = 0
where asc_b would account for the ordering effect, which is a survey artefact. After model estimation, you simply remove this constant (whether it is significant or not does not matter) from further analysis because it is only added to ensure that parameters are not biased because of any ordering effect. If you really want to do it correctly, you would randomise the position of the "unforced" alternative to the first and last position across respondents (not within-respondent as that would confuse the respondent). You can then create a dummy variable that indicates the position of "unforced" and include this in the utility function of "unforced", which essentially creates yet another 'constant' that indicates the order effect also with respect to "unforced".
2. See above. You only need to consider asc_b during model estimation to avoid order bias, you do not need to consider it during the design phase.
3. If you have a status quo alternative, then the utility of alt3 would typically not be zero but rather have levels of the attributes. If you do not know the levels of the attributes of the current treatment, then you need to ask the respondent in the survey so you can use them during model estimation. Setting all status quo utilities all to zero would create a lot of noise if the status quo is different for different respondents. If the status quo is the same for all respondents, then setting it to zero is fine as the effect will be captured in b0.
4. Correct. You can only have J-1 constants in the utility function of any choice model (with J the number of alternatives), i.e., multinomial logit, mixed logit, latent class, etc. If you use mixed logit, you would typically make all parameters random, i.e., constants and coefficients. But I would probably not make the asc_b constant for the order effect above random.
Michiel
V[["treatmentA"]] = asc_a + asc_b + …
V[["treatmentB"]] = asc_a + …
V[["unforced"]] = 0
where asc_b would account for the ordering effect, which is a survey artefact. After model estimation, you simply remove this constant (whether it is significant or not does not matter) from further analysis because it is only added to ensure that parameters are not biased because of any ordering effect. If you really want to do it correctly, you would randomise the position of the "unforced" alternative to the first and last position across respondents (not within-respondent as that would confuse the respondent). You can then create a dummy variable that indicates the position of "unforced" and include this in the utility function of "unforced", which essentially creates yet another 'constant' that indicates the order effect also with respect to "unforced".
2. See above. You only need to consider asc_b during model estimation to avoid order bias, you do not need to consider it during the design phase.
3. If you have a status quo alternative, then the utility of alt3 would typically not be zero but rather have levels of the attributes. If you do not know the levels of the attributes of the current treatment, then you need to ask the respondent in the survey so you can use them during model estimation. Setting all status quo utilities all to zero would create a lot of noise if the status quo is different for different respondents. If the status quo is the same for all respondents, then setting it to zero is fine as the effect will be captured in b0.
4. Correct. You can only have J-1 constants in the utility function of any choice model (with J the number of alternatives), i.e., multinomial logit, mixed logit, latent class, etc. If you use mixed logit, you would typically make all parameters random, i.e., constants and coefficients. But I would probably not make the asc_b constant for the order effect above random.
Michiel