Help with a DCE design that has multiple constraints

This forum is for posts that specifically focus on Ngene.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Help with a DCE design that has multiple constraints

Postby tomosrobinson » Tue Jan 25, 2022 2:31 am

Hi there,

I am currently working on a DCE design and was hoping I could get some feedback on where I’ve got to so far. This is only the second DCE I’ve worked on so I’m a relative beginner!

Background Details of the DCE

We are investigating the general public's preferences for different types of public health intervention related to diet. The six attributes that will be included in the DCE are:

• Specific type of public health intervention: (12 levels – Sugar Levy on Soft Drinks, Nutrition Labelling etc…)
• Framing (i.e. who is it aimed at) : Children, Adults, Both
• Equity (i.e. who is likely to benefit) : Low Income, Medium & High Income, All
• Agency (i.e. how much effort is required) : None, Some, A Lot
• Effectiveness : Obesity reduced by very little, a little, a lot
• Value for Money: Low, Moderate, High

In each choice situation, two alternatives will initially be shown, as well as a no choice option (unforced choice). If the participant chooses the no choice option, they will then be asked to complete a 'forced choice', with the no choice option removed.

As well as the main effects, we are interested in all the interactions between Equity, Agency, Effectiveness and Value for Money respectively.

As we don’t have any priors, our plan is:

1. Generate a first design (D1) and use this in a pilot study with 10% of our sample (100 respondents)
2. Create an efficient design (D2) using the pilot parameters as priors for the main survey with the other 90% of our sample (900 respondents)

The main complicating factor with this design is that there are a number of conditions in relation to the type of publication health intervention, the framing of the intervention and the agency of the intervention that need to implemented in order for the scenarios to be considered realistic. For example, one of the public health interventions is a National School Breakfast Programme, which can’t be aimed at adults. Moreover, another public health intervention is a ‘Sugar Levy on Soft Drinks’, which can’t be considered to require a lot of effort.

I’m aware that these constraints will result in a less efficient design and that this is necessary in order for the choices to be realistic, but I’m a little concerned that the sheer number of conditions we’ve currently got (particularly between the intervention and agency attributes) will lead to multicollinearity. If that’s the case, we might have to reconsider one or more of the attributes…

Ngene Code for D1 (so far)

Code: Select all
design
;alts = Alt_A*, Alt_B*, NoChoice
;rows = 120
;block = 10
;eff = (mnl,d)

;cond:

if(Alt_A.Intervention = 7, Alt_A.Framing = 1),
if(Alt_A.Intervention = 9, Alt_A.Framing >1),
if(Alt_A.Intervention = 11, Alt_A.Framing >1),
if(Alt_A.Intervention = 12, Alt_A.Framing >1),
if(Alt_B.Intervention = 7, Alt_B.Framing = 1),
if(Alt_B.Intervention = 9, Alt_B.Framing >1),
if(Alt_B.Intervention = 11, Alt_B.Framing >1),
if(Alt_B.Intervention = 12, Alt_B.Framing >1),
if(Alt_A.Intervention = 1, Alt_A.Agency = 3),
if(Alt_A.Intervention = 2, Alt_A.Agency = 3),
if(Alt_A.Intervention = 3, Alt_A.Agency >1),
if(Alt_A.Intervention = 4, Alt_A.Agency >1),
if(Alt_A.Intervention = 5, Alt_A.Agency >1),
if(Alt_A.Intervention = 6, Alt_A.Agency >1),
if(Alt_A.Intervention = 7, Alt_A.Agency >1),
if(Alt_A.Intervention = 8, Alt_A.Agency <3),
if(Alt_A.Intervention = 9, Alt_A.Agency <3),
if(Alt_A.Intervention = 10, Alt_A.Agency <3),
if(Alt_A.Intervention = 11, Alt_A.Agency <3),
if(Alt_A.Intervention = 12, Alt_A.Agency <3),
if(Alt_B.Intervention = 1, Alt_B.Agency = 3),
if(Alt_B.Intervention = 2, Alt_B.Agency = 3),
if(Alt_B.Intervention = 3, Alt_B.Agency >1),
if(Alt_B.Intervention = 4, Alt_B.Agency >1),
if(Alt_B.Intervention = 5, Alt_B.Agency >1),
if(Alt_B.Intervention = 6, Alt_B.Agency >1),
if(Alt_B.Intervention = 7, Alt_B.Agency >1),
if(Alt_B.Intervention = 8, Alt_B.Agency <3),
if(Alt_B.Intervention = 9, Alt_B.Agency <3),
if(Alt_B.Intervention = 10, Alt_B.Agency <3),
if(Alt_B.Intervention = 11, Alt_B.Agency <3),
if(Alt_B.Intervention = 12, Alt_B.Agency <3)

;model:
U(Alt_A) = b1         + b2_Intervention                            * Intervention [1,2,3,4,5,6,7,8,9,10,11,12]
                      + b3_Framing                                 * Framing [1,2,3]
                      + b4_Equity                                  * Equity [1,2,3]
                      + b5_Agency                                  * Agency [1,2,3]
                      + b6_Value                                   * Value [1,2,3]
                      + b7_Effectiveness                           * Effectiveness [1,2,3]
                      + b8_Equity_Agency_Interaction               * Equity * Agency
                      + b9_Equity_Value_Interaction                * Equity * Value
                      + b10_Equity_Effectiveness_Interaction       * Equity * Effectiveness
                      + b11_Agency_Value                           * Agency * Value
                      + b12_Agency_Effectiveness                   * Agency * Effectiveness
                      + b13_Value_Effectiveness                    * Value * Effectiveness 
/
U(Alt_B) = b1         + b2_Intervention                            * Intervention
                      + b3_Framing                                 * Framing
                      + b4_Equity                                  * Equity
                      + b5_Agency                                  * Agency
                      + b6_Value                                   * Value
                      + b7_Effectiveness                           * Effectiveness
                      + b8_Equity_Agency_Interaction               * Equity * Agency
                      + b9_Equity_Value_Interaction                * Equity * Value
                      + b10_Equity_Effectiveness_Interaction       * Equity * Effectiveness
                      + b11_Agency_Value                           * Agency * Value
                      + b12_Agency_Effectiveness                   * Agency * Effectiveness
                      + b13_Value_Effectiveness                    * Value * Effectiveness

$


 


If anyone has any comments or suggestions (on this particular design or my coding in general) it would be much appreciated.

Best wishes,

Tom
tomosrobinson
 
Posts: 17
Joined: Tue Nov 17, 2020 2:36 am

Re: Help with a DCE design that has multiple constraints

Postby Michiel Bliemer » Tue Jan 25, 2022 8:17 am

Hi Tom,

These are my comments and suggestions:

1. If there exists multicollinearity, the D-error will be infinite or extremely large. You will notice this immediately. In your case, your constraints do not seem to cause any issues. I have simplified your constraints.

2. You need to use dummy (or effects) coding for categorical variables. Note that the last level in Ngene is the base level. I have added .dummy for all parameters (note that you do not need to add it for Alt_B since Ngene is smart enough to understand that they are the same dummy coded parameters).

3. You can indicate the preference order of the attribute levels by using small near-zero prior values. This allows Ngene to avoid choice tasks with a dominant alternative. I have added priors for some attributes based on my understanding of the attributes and perhaps you can add more if the other levels also have a clear preference order.

4. You specified interactions for numerical variables, but since your variables are categorical you will need to multiply individual dummy coded variables as I have done in the code. This adds a lot more parameters to your model as you can see.

Code: Select all
design
;alts = Alt_A*, Alt_B*, NoChoice
;rows = 120
;block = 10
;eff = (mnl,d)

;cond:

if(Alt_A.Intervention = 7, Alt_A.Framing = 1),
if(Alt_A.Intervention = [9,11,12], Alt_A.Framing >1),
if(Alt_A.Intervention = [1.2], Alt_A.Agency = 3),
if(Alt_A.Intervention = [3,4,5,6,7], Alt_A.Agency >1),
if(Alt_A.Intervention = [8,9,10,11,12], Alt_A.Agency <3),

if(Alt_B.Intervention = 7, Alt_B.Framing = 1),
if(Alt_B.Intervention = [9,11,12], Alt_B.Framing >1),
if(Alt_B.Intervention = [1,2], Alt_B.Agency = 3),
if(Alt_B.Intervention = [3,4,5,6,7], Alt_B.Agency >1),
if(Alt_B.Intervention = [8,9,10,11,12], Alt_B.Agency <3)

;model:
U(Alt_A) = b1         + b2_Intervention.dummy[0|0|0|0|0|0|0|0|0|0|0] * Intervention[1,2,3,4,5,6,7,8,9,10,11,12] ? 12 = base
                      + b3_Framing.dummy[0|0]                        * Framing[1,2,3] ? 1 = Children, 2 = Adults, 3 = both (base)
                      + b4_Equity.dummy[0|0]                         * Equity[1,2,3]  ? 1 = low income, 2 = medium & high income, 3 = all (base)
                      + b5_Agency.dummy[0.002|0.001]                 * Agency[1,2,3]  ? 1 = None, 2 = Some, 3 = A lot (base)
                      + b6_Value.dummy[-0.002|-0.001]                * Value[1,2,3]   ? 1 = low, 2 = moderate, 3 = high (base)
                      + b7_Effectiveness.dummy[-0.002|-0.001]        * Effectiveness[1,2,3] ? 1 = obesity reduce by very little, 2 = a little, 3 = a lot (base)
                      + b8_1_Equity_Agency_Interaction               * Equity.dummy[1] * Agency.dummy[1]
                      + b8_2_Equity_Agency_Interaction               * Equity.dummy[2] * Agency.dummy[1]
                      + b8_3_Equity_Agency_Interaction               * Equity.dummy[1] * Agency.dummy[2]
                      + b8_4_Equity_Agency_Interaction               * Equity.dummy[2] * Agency.dummy[2]
                      + b9_1_Equity_Value_Interaction                * Equity.dummy[1] * Value.dummy[1]
                      + b9_2_Equity_Value_Interaction                * Equity.dummy[2] * Value.dummy[1]
                      + b9_3_Equity_Value_Interaction                * Equity.dummy[1] * Value.dummy[2]
                      + b9_4_Equity_Value_Interaction                * Equity.dummy[2] * Value.dummy[2]
                      + b10_1_Equity_Effectiveness_Interaction       * Equity.dummy[1] * Effectiveness.dummy[1]
                      + b10_2_Equity_Effectiveness_Interaction       * Equity.dummy[2] * Effectiveness.dummy[1]
                      + b10_3_Equity_Effectiveness_Interaction       * Equity.dummy[1] * Effectiveness.dummy[2]
                      + b10_4_Equity_Effectiveness_Interaction       * Equity.dummy[2] * Effectiveness.dummy[2]
                      + b11_1_Agency_Value                           * Agency.dummy[1] * Value.dummy[1]
                      + b11_2_Agency_Value                           * Agency.dummy[2] * Value.dummy[1]
                      + b11_3_Agency_Value                           * Agency.dummy[1] * Value.dummy[2]
                      + b11_4_Agency_Value                           * Agency.dummy[2] * Value.dummy[2]
                      + b12_1_Agency_Effectiveness                   * Agency.dummy[1] * Effectiveness.dummy[1]
                      + b12_2_Agency_Effectiveness                   * Agency.dummy[2] * Effectiveness.dummy[1]
                      + b12_3_Agency_Effectiveness                   * Agency.dummy[1] * Effectiveness.dummy[2]
                      + b12_4_Agency_Effectiveness                   * Agency.dummy[2] * Effectiveness.dummy[2]
                      + b13_1_Value_Effectiveness                    * Value.dummy[1] * Effectiveness.dummy[1]
                      + b13_2_Value_Effectiveness                    * Value.dummy[2] * Effectiveness.dummy[1]
                      + b13_3_Value_Effectiveness                    * Value.dummy[1] * Effectiveness.dummy[2]
                      + b13_4_Value_Effectiveness                    * Value.dummy[2] * Effectiveness.dummy[2]

         /
U(Alt_B) = b1         + b2_Intervention                              * Intervention
                      + b3_Framing                                   * Framing
                      + b4_Equity                                    * Equity
                      + b5_Agency                                    * Agency
                      + b6_Value                                     * Value
                      + b7_Effectiveness                             * Effectiveness
                      + b8_Equity_Agency_Interaction                 * Equity * Agency
                      + b9_Equity_Value_Interaction                  * Equity * Value
                      + b10_Equity_Effectiveness_Interaction         * Equity * Effectiveness
                      + b11_Agency_Value                             * Agency * Value
                      + b12_Agency_Effectiveness                     * Agency * Effectiveness
                      + b13_Value_Effectiveness                      * Value * Effectiveness
                      + b8_1_Equity_Agency_Interaction               * Equity.dummy[1] * Agency.dummy[1]
                      + b8_2_Equity_Agency_Interaction               * Equity.dummy[2] * Agency.dummy[1]
                      + b8_3_Equity_Agency_Interaction               * Equity.dummy[1] * Agency.dummy[2]
                      + b8_4_Equity_Agency_Interaction               * Equity.dummy[2] * Agency.dummy[2]
                      + b9_1_Equity_Value_Interaction                * Equity.dummy[1] * Value.dummy[1]
                      + b9_2_Equity_Value_Interaction                * Equity.dummy[2] * Value.dummy[1]
                      + b9_3_Equity_Value_Interaction                * Equity.dummy[1] * Value.dummy[2]
                      + b9_4_Equity_Value_Interaction                * Equity.dummy[2] * Value.dummy[2]
                      + b10_1_Equity_Effectiveness_Interaction       * Equity.dummy[1] * Effectiveness.dummy[1]
                      + b10_2_Equity_Effectiveness_Interaction       * Equity.dummy[2] * Effectiveness.dummy[1]
                      + b10_3_Equity_Effectiveness_Interaction       * Equity.dummy[1] * Effectiveness.dummy[2]
                      + b10_4_Equity_Effectiveness_Interaction       * Equity.dummy[2] * Effectiveness.dummy[2]
                      + b11_1_Agency_Value                           * Agency.dummy[1] * Value.dummy[1]
                      + b11_2_Agency_Value                           * Agency.dummy[2] * Value.dummy[1]
                      + b11_3_Agency_Value                           * Agency.dummy[1] * Value.dummy[2]
                      + b11_4_Agency_Value                           * Agency.dummy[2] * Value.dummy[2]
                      + b12_1_Agency_Effectiveness                   * Agency.dummy[1] * Effectiveness.dummy[1]
                      + b12_2_Agency_Effectiveness                   * Agency.dummy[2] * Effectiveness.dummy[1]
                      + b12_3_Agency_Effectiveness                   * Agency.dummy[1] * Effectiveness.dummy[2]
                      + b12_4_Agency_Effectiveness                   * Agency.dummy[2] * Effectiveness.dummy[2]
                      + b13_1_Value_Effectiveness                    * Value.dummy[1] * Effectiveness.dummy[1]
                      + b13_2_Value_Effectiveness                    * Value.dummy[2] * Effectiveness.dummy[1]
                      + b13_3_Value_Effectiveness                    * Value.dummy[1] * Effectiveness.dummy[2]
                      + b13_4_Value_Effectiveness                    * Value.dummy[2] * Effectiveness.dummy[2]

$


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

Re: Help with a DCE design that has multiple constraints

Postby tomosrobinson » Tue Jan 25, 2022 7:59 pm

Hi Michiel,

Thank you for your extremely useful comments and suggestions.

- I was trying to work out a way of simplifying the constraints but couldn't work it out... that's a lot more concise

- I got a bit confused about whether to include both dummy coding and small near-zero priors or not, thanks for clearing those issues up!

Best wishes,

Tom
tomosrobinson
 
Posts: 17
Joined: Tue Nov 17, 2020 2:36 am


Return to Choice experiments - Ngene

Who is online

Users browsing this forum: No registered users and 8 guests

cron