Minimum number of choice situations and SQ

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Minimum number of choice situations and SQ

Postby p.lecoent » Tue May 10, 2022 6:10 pm

I’m preparing a design for an unlabelled choice experiment with 2 alternatives and a statu-quo. The status-quo levels are fixed and present in the other two alternatives for all attributes except the monetary attribute which level is 0 in the status quo and superieur to 0 in the alternatives. My code is the following:

Design
;alts=alt1, alt2, sq
;rows=?
;block=?
;eff=(mnl,d)
;alg = mfederov(candidates = 500)
;require:
sq.INF = 1,
sq.HEAT = 1
sq.CAR = 1,
sq.DISTANCE = 1

;model:
U(alt1)=b1.dummy[0|0|0|0]*INF[1,2,3,4,5] ? INF : Water substitution level INF=1 <10% INF=2 25% INF=3 50% INF=4 75% INF=5 100%
+b2.dummy[0|0|0|0]*HEAT[1,2,3,4,5] ? HEAT : Heat island effect surface reduction HEAT=1 0% HEAT=2 15% HEAT=3 30% HEAT=4 45% HEAT=5 60%
+b3.dummy[0]*CAR[1,2] ? CAR Reduction of road and parking space CAR=1 No Reduction CAR=2 Reduction
+b4.dummy[0|0|0|0]*DISTANCE[1,2,3,4,5] ? DISTANCE Distance of closest solution to home DISTANCE=1 No new green solution DISTANCE=2 100m DISTANCE=3 200m DISTANCE=4 500m DISTANCE=5 1KM
+b5[0]*BILL [10,20,30,40, 50] ? Increase of the water bill in €
U(alt2)=b1*INF+b2*HEAT+b3*CAR+b4*DISTANCE+b5*BILL
U(SQ)= b6[0]+ b1*INF+b2*HEAT+b3*CAR+b4*DISTANCE
$
I have 3 questions:
- Is my coding of the status-quo accurate?
- I'm struggling with the estimation of the minimum of choice situation. In the formula used to estimate the minimum number of choice situation, (J-1)S=K I wonder whether the status quo is considered an alternative. In other words, if J=2 or 3. If the SQ is not an alternative then K being equal to 15 (including constant). I have to include a minimum of 15 choice situations, 20 if I want to have attribute level balance. If the SQ counts then the minimum number is 7.5 and we can live with 10 choice situations.
- If I end up with 20 choice situations. Is it preferable to have 2 blocks of 10 or 4 blocks of 5.

Thanks a lot for your help
p.lecoent
 
Posts: 8
Joined: Tue May 10, 2022 1:59 am

Re: Minimum number of choice situations and SQ

Postby Michiel Bliemer » Tue May 10, 2022 7:39 pm

Yes you have coded the status quo alternative correctly. I have added "/" after each alternative and I added attribute level constraints for the numerical attribute BILL since the modified Federov algorithm does not satisfy attribute level balance.

SQ is an alternative, so you would at minimum 8 choice tasks to estimate the model. It is a good idea to have more variation in your data, so I generally recommend multiplying this theoretical minimum with 2 or 3, so in your case 20 should be fine. If you believe that respondents will be able to handle 10 choice tasks, then 2 blocks is best, but if you believe this is too demanding then you may need to use 4 blocks.

The script below would work.

Code: Select all
Design
;alts=alt1, alt2, sq
;rows=20
;block=2
;eff=(mnl,d)
;alg = mfederov(candidates = 500)
;require:
sq.INF = 1,
sq.HEAT = 1,
sq.CAR = 1,
sq.DISTANCE = 1
;model:
U(alt1) = b1.dummy[0|0|0|0] * INF[1,2,3,4,5]                             ? INF : Water substitution level INF=1 <10% INF=2 25% INF=3 50% INF=4 75% INF=5 100%
        + b2.dummy[0|0|0|0] * HEAT[1,2,3,4,5]                            ? HEAT : Heat island effect surface reduction HEAT=1 0% HEAT=2 15% HEAT=3 30% HEAT=4 45% HEAT=5 60%
        + b3.dummy[0]       * CAR[1,2]                                   ? CAR Reduction of road and parking space CAR=1 No Reduction CAR=2 Reduction
        + b4.dummy[0|0|0|0] * DISTANCE[1,2,3,4,5]                        ? DISTANCE Distance of closest solution to home DISTANCE=1 No new green solution DISTANCE=2 100m DISTANCE=3 200m DISTANCE=4 500m DISTANCE=5 1KM
        + b5[0]             * BILL [10,20,30,40,50](2-4,2-4,2-4,2-4,2-4) ? Increase of the water bill in €, added attribute level constraints to ensure some degree of balance for numerical attribute
        /
U(alt2) = b1*INF + b2*HEAT + b3*CAR + b4*DISTANCE + b5*BILL /
U(SQ)   = b6[0] + b1*INF + b2*HEAT + b3*CAR + b4*DISTANCE
$


If you want to have attribute level balance in your design, you need to use the default swapping algorithm. Note that the LAST level in Ngene is the reference level for dummy coding, so I have moved level 1 to the end of levels. This means that level 1 is the base for all dummy coded attributes and therefore adds 0 utility for this level. This means it can be left out of the status quo alternative and no require constraints are necessary. The script below will generate the design.

Code: Select all
Design
;alts=alt1, alt2, sq
;rows=20
;block=2
;eff=(mnl,d)
;model:
U(alt1) = b1.dummy[0|0|0|0] * INF[2,3,4,5,1]         ? INF : Water substitution level INF=1 <10% INF=2 25% INF=3 50% INF=4 75% INF=5 100%
        + b2.dummy[0|0|0|0] * HEAT[12,3,4,5,1]       ? HEAT : Heat island effect surface reduction HEAT=1 0% HEAT=2 15% HEAT=3 30% HEAT=4 45% HEAT=5 60%
        + b3.dummy[0]       * CAR[2,1]               ? CAR Reduction of road and parking space CAR=1 No Reduction CAR=2 Reduction
        + b4.dummy[0|0|0|0] * DISTANCE[2,3,4,5,1]    ? DISTANCE Distance of closest solution to home DISTANCE=1 No new green solution DISTANCE=2 100m DISTANCE=3 200m DISTANCE=4 500m DISTANCE=5 1KM
        + b5[0]             * BILL [10,20,30,40,50]  ? Increase of the water bill in €
        /
U(alt2) = b1*INF + b2*HEAT + b3*CAR + b4*DISTANCE + b5*BILL /
U(SQ)   = b6[0] + b5*BILLsq[0]
$


Michiel
Michiel Bliemer
 
Posts: 1838
Joined: Tue Mar 31, 2009 4:13 pm

Re: Minimum number of choice situations and SQ

Postby p.lecoent » Tue May 10, 2022 8:34 pm

Thanks a lot Michiel for your very quick responses. This is very clear and VERY helpful.
p.lecoent
 
Posts: 8
Joined: Tue May 10, 2022 1:59 am

Re: Minimum number of choice situations and SQ

Postby p.lecoent » Tue Jun 07, 2022 10:54 pm

Dear Michiel,
In the meantime, there has been modifications of the levels and the SQ description.
The main modification is that the level 1 of attribute INF now describes only the SQ and is no longer a possibility in the other alternatives. Indeed level 1 could not be realistically combined with the other attribute levels.
- Is the design below accurate? The problem that I see is that now b6 could not be interpreted for the SQ preference since it is confounded with the reference level of attribute INF: level 2. Is there an alternative to avoid this problem?

Thanks

Design
;alts=alt1, alt2, sq
;rows=12
;block=2
;eff=(mnl,d)
;model:
U(alt1) = b1.dummy[0|0] * INF[3,4,2] ? INF : Water substitution level INF=1 None INF=2 25% INF=3 50% INF=4 100% (INF =1 only used in the SQ)
+ b2.dummy[0|0|0] * HEAT[2,3,4,1] ? HEAT : Heat island effect surface reduction HEAT=1 0% HEAT=20 % HEAT=3 40% HEAT=5 60%
+ b3.dummy[0] * CAR[2,1] ? CAR Reduction of road and parking space CAR=1 No Reduction CAR=2 Reduction
+ b4.dummy[0|0|0] * DISTANCE[2,3,4,1] ? DISTANCE Distance of closest solution to home DISTANCE=1 No new green solution DISTANCE=2 In front of your house DISTANCE=3 100m DISTANCE=4 500m
+ b5[0] * BILL [10,20,30,40,50,60] ? Increase of the water bill in €
/
U(alt2) = b1*INF + b2*HEAT + b3*CAR + b4*DISTANCE + b5*BILL /
U(SQ) = b6[0] + b5*BILLsq[0]
$
p.lecoent
 
Posts: 8
Joined: Tue May 10, 2022 1:59 am

Re: Minimum number of choice situations and SQ

Postby Michiel Bliemer » Wed Jun 08, 2022 8:24 am

You are correct that "level 1" will be absorbed in the SQ constant in that case. This is not a major issue, except that you cannot directly interpret the SQ constant as you indicate.

This is one of the articles that I have referred to in other posts, they propose a hybrid coding method to deal with the issue but I have no experience with it.

Cooper, B., Rose, J.M. and Crase, L. (2012) Does anybody like water restrictions? Some observations in Australian urban communities, Australian Journal of Agricultural and Resource Economics, 56(1), 61-51.

Michiel
Michiel Bliemer
 
Posts: 1838
Joined: Tue Mar 31, 2009 4:13 pm

Re: Minimum number of choice situations and SQ

Postby p.lecoent » Wed Jun 08, 2022 5:46 pm

Thanks Michiel.
p.lecoent
 
Posts: 8
Joined: Tue May 10, 2022 1:59 am

Re: Minimum number of choice situations and SQ

Postby tpham » Wed May 29, 2024 9:53 pm

Dear all,
I've been looking for a solution to my design problem in many similar posts about dummy coding for statuquo alternative with attribute levels fixed and ONLY appear in the sq alternative. I have not found a clear answer yet. Maybe I misunderstood something.

I have 2 unlabeled alternatives and one sq alternative with fixed levels and some of them only appear in statuquo alternative and will be treated as reference levels in dummy coding.

The NGENE code that p.lecoent posted on Tue Jun 07, 2022 10:54 pm might have an issue as for the attribute INF (that is supposed to take 2, 3, 4 for alt1 and alt2 and fixed level 1 for sq): In U(sq), INF level is not defined and if there is 4 levels total for INF, shouldn’t there be 3 coefficients ?

I understand that one way to do that is to put some conditions so that, for exemple, alt1.INF >1, alt2.INF >1, and sq.INF =1, etc..

1) I tried to put conditions to my design as described above (I have 3 attributes in the same case). My problem is, the MNL D error is undefined.
2) There is one design, I suppose that it comes from the first iteration, and since the D error is undefined, it cannot go further to the next iteration. what is this design worth?
2) Is there any other solutions or we just simply CANNOT specify the design that way?
3) I put a constant for alt1 & 2 (or just 1 constant for sq). In that case I understand that I cannot interpret it as an alternative-specific constant, but there should be no problem interpreting the coefficients of dummy variables ?

I post my syntax here (if any chance that the problem comes from elsewhere that is easier to fix)
Design
;alts = alt1*, alt2*, sq
;rows = 10
;block = 2
;eff = (mnl,d) + 0.5*(imbalance)
;alg = mfederov(candidates = candidate_set.csv) ? This is for the partial design with 3 overlap attributes. In this file, I set alrealdy the attribute levels for sq fixed and other conditions in alt1 and alt2. I tried to run without this and set the conditions as mentioned earlier, but it does not work either...
;model:
U(alt1) = b0[ 0]
+ b1.dummy[0|0] * Diag1[1,2,0] ? level 0 only appear in sq
+ b2.dummy[0|0] * Diag2[1,2,0] ? level 0 only appear in sq
+ b3.dummy[0] * Risque_appt[1,2]
+ b4.dummy[0|0] * Risque_maison[1,2,3]
+ b5.dummy[0|0] * Risque_eco[1,2,3]
+ b6.dummy[0] * visibility[1,0]
+ b7.dummy[0|0] * financement[1,2,0] ? level 0 only appear in sq
+ b8[0] * cout[0, 25, 50, 75, 100, 125, 150]
/
U(alt2) = b0
+ b1 * Diag1
+ b2 * Diag2
+ b3 * Risque_appt
+ b4 * Risque_maison
+ b5 * Risque_eco
+ b6 * visibility
+ b7 * financement
+ b8 * cout
/
U(sq) = b1* Diag1
+ b2 * Diag2
+ b3* Risque_appt
+ b4 * Risque_maison
+ b5 * Risque_eco
+ b6 * visibility
+ b7 * financement
+ b8 * cout
$

Thank you very much in advance,
tpham
 
Posts: 3
Joined: Tue Apr 24, 2018 12:07 am

Re: Minimum number of choice situations and SQ

Postby Michiel Bliemer » Fri May 31, 2024 11:33 am

The issue is that you cannot estimate an alternative-specific constant AND include level 0 in the dummy variable at the same time if it only appears in the sq alternative. This makes the model non-identified and the D-error will therefore be infinite, i.e. you cannot estimate the model you specified. The issue is easy to fix, you have two options. In the scripts below I removed the candidate set so that I could confirm that they work. In the first option you have a constant, but you cannot really interpret this constant because it absorbs level 0 of some attributes. In the option you do not have a constant so you cannot account for specific preferences for the status quo independent of the attribute levels. The only solution that allows you to estimate the constant as well as all other parameters is to also allow level 0 in the status quo alternative.

Option 1:
Estimate a constant for the SQ alternative but remove level 0 for attributes Diag1, Diag2, and financement in the utility functions for alt1 and alt2; these levels will be absorbed by the constant.

Code: Select all
Design
;alts = alt1*, alt2*, sq
;rows = 10
;block = 2
;eff = (mnl,d) + 0.5*(imbalance)
;alg = mfederov
;model:
U(alt1) = b1.dummy[0]   * Diag1[2,1]
        + b2.dummy[0]   * Diag2[2,1]
        + b3.dummy[0]   * Risque_appt[1,2]
        + b4.dummy[0|0] * Risque_maison[1,2,3]
        + b5.dummy[0|0] * Risque_eco[1,2,3]
        + b6.dummy[0]   * visibility[1,0]
        + b7.dummy[0]   * financement[2,1]
        + b8[0]         * cout[0, 25, 50, 75, 100, 125, 150]
        /
U(alt2) = b1 * Diag1
        + b2 * Diag2
        + b3 * Risque_appt
        + b4 * Risque_maison
        + b5 * Risque_eco
        + b6 * visibility
        + b7 * financement
        + b8 * cout
        /
U(sq)   = b0  ? This constant absorbs level 0 for Diag1, Diag2, and Financement
        + b3 * Risque_appt
        + b4 * Risque_maison
        + b5 * Risque_eco
        + b6 * visibility
        + b8 * cout
$



Option 2:
Remove the constant. I added require constraints to set the levels of the sq alternatives.

Code: Select all
Design
;alts = alt1*, alt2*, sq*
;rows = 10
;block = 2
;eff = (mnl,d) + 0.5*(imbalance)
;alg = mfederov
;require:
sq.Diag1 = 0,
sq.Diag2 = 0,
sq.financement = 0
;model:
U(alt1) = b1.dummy[0|0] * Diag1[1,2,0]
        + b2.dummy[0|0] * Diag2[1,2,0]
        + b3.dummy[0]   * Risque_appt[1,2]
        + b4.dummy[0|0] * Risque_maison[1,2,3]
        + b5.dummy[0|0] * Risque_eco[1,2,3]
        + b6.dummy[0]   * visibility[1,0]
        + b7.dummy[0|0] * financement[1,2,0]
        + b8[0]         * cout[0, 25, 50, 75, 100, 125, 150]
        /
U(alt2) = b1 * Diag1
        + b2 * Diag2
        + b3 * Risque_appt
        + b4 * Risque_maison
        + b5 * Risque_eco
        + b6 * visibility
        + b7 * financement
        + b8 * cout
        /
U(sq)   = b1 * Diag1
        + b2 * Diag2
        + b3 * Risque_appt
        + b4 * Risque_maison
        + b5 * Risque_eco
        + b6 * visibility
        + b7 * financement
        + b8 * cout
$


Michiel
Michiel Bliemer
 
Posts: 1838
Joined: Tue Mar 31, 2009 4:13 pm

Re: Minimum number of choice situations and SQ

Postby tpham » Sat Jun 01, 2024 1:37 am

Thank you very much for your quick response!

I would prefer option 2, even with a cost of not knowing the asc for the statu quo alternative.

But I am still a little confused about the option 1. Could you kindly give me an explanation (mathematically or non-mathematically) why we can get only one parameter for b1, b2, b7 while there are 3 levels for each attribut ? How would I interpret b1, b2, b7 if I have only one parameter and 1 confounded constant for the baseline levels ?

In your proposition of the option 2, the level 0 still appear for Diag1, Diag2, and financement in the alternatives 1 and 2 (I am sorry if I didn't explain it clearly, I meant that the level 0 for these attributes only appear in the sq). If I add more conditions to these attribute levels and some more conditions to the statuquo alternative (so that all levels of sq are fixed), it gives me again a non-identified model...

Design
;alts = alt1*, alt2*, sq*
;rows = 10
;block = 2
;eff = (mnl,d) + 0.5*(imbalance)
;alg = mfederov
;require:
alt1.Diag1>0,
alt2.Diag1>0,
alt1.Diag2>0,
alt2.Diag2>0,
alt1.financement >0,
alt2.financement >0,
sq.Diag1 = 0,
sq.Diag2 = 0,
sq.financement = 0,
sq.Risque_appt=1,
sq.Risque_maison=2,
sq.Risque_eco=3,
sq.visibility=0
;model:
U(alt1) = b1.dummy[0|0] * Diag1[1,2,0]
+ b2.dummy[0|0] * Diag2[1,2,0]
+ b3.dummy[0] * Risque_appt[1,2]
+ b4.dummy[0|0] * Risque_maison[1,2,3]
+ b5.dummy[0|0] * Risque_eco[1,2,3]
+ b6.dummy[0] * visibility[1,0]
+ b7.dummy[0|0] * financement[1,2,0]
+ b8[0] * cout[25, 50, 75, 100, 125, 150]
/
U(alt2) = b1 * Diag1
+ b2 * Diag2
+ b3 * Risque_appt
+ b4 * Risque_maison
+ b5 * Risque_eco
+ b6 * visibility
+ b7 * financement
+ b8 * cout
/
U(sq) = b1 * Diag1
+ b2 * Diag2
+ b3 * Risque_appt
+ b4 * Risque_maison
+ b5 * Risque_eco
+ b6 * visibility
+ b7 * financement
+ b8 * coutsq[0]
$

I could change Diag1 and Diag2 as quantitative variables so that there are less constraints (it seems to work) but I still cannot get why it works and I would be really frustrated to force them to be quantitative because behaviorally it makes less sense.
Thank you again for your help!
tpham
 
Posts: 3
Joined: Tue Apr 24, 2018 12:07 am

Re: Minimum number of choice situations and SQ

Postby Michiel Bliemer » Sat Jun 01, 2024 7:52 am

The explanation for removing level 0 in my option 1 is as follows. The constant is a label effect, i.e., it describes the preference for sq over alt1 and alt2. A label is a fixed "attribute" of an alternative. By making level 0 only appear in the sq alternative, you are essentially adding another constant to the sq alternative that describes the label. You cannot estimate two constants for a single alternative, such a model is not identified and hence the D-error becomes Undefined (infinite). So this means that level 0 will be absorbed into a single constant in sq. In contrast, in alt1 and alt2 you show two levels and therefore you can only estimate one dummy parameter. You will only be able to interpret b1, b2, and b7 among the two levels within alt1 and alt2, you are not able to compare with sq since multiple attribute levels are absorbed into the constant.

In the second option, you are correct that if you add anything more than the constraints below the model becomes unidentified. The constrants below essentially indicate that you are estimating a constant for level 0 of Diag1 in the sq alternative. Adding the constraint alt2.Diag2 > 0 will result in an unidentified model because you are essentially adding a second constant, namely for level 0 of Diag2 in the sq alternative. You can at most only have a single constant.

;require:
sq.Diag1 = 0,
sq.Diag2 = 0,
sq.financement = 0,
alt1.Diag1 > 0, alt2.Diag1 > 0,
alt1.Diag2 > 0,
alt1.financement > 0

This is why it is so important in a choice experiment to also allow the status quo level to appear in the alternatives as otherwise you are not able to estimate and disentangle all effects. You could look into the Cooper et al. (2012) mentioned in an earlier post.

Michiel
Michiel Bliemer
 
Posts: 1838
Joined: Tue Mar 31, 2009 4:13 pm

Next

Return to Choice experiments - Ngene

Who is online

Users browsing this forum: No registered users and 15 guests