Model Specification with a Status Quo Opt-Out Alternative

This forum is for posts covering broader stated choice experimental design issues.

Moderators: Andrew Collins, Michiel Bliemer, johnr

Model Specification with a Status Quo Opt-Out Alternative

Postby mabbott » Fri Jan 12, 2024 2:44 am

I am trying to run a dummy coded WTP-space MNL model using my DCE data. Although all my attributes have continuous levels, I am running a dummy coded model to test the linearity of estimated coefficients.

My DCE has the following attributes and levels:

1) Chance of diagnosis: 30% / 35% / 45% / 55%
2) Number of clinic visits: 2 / 6 / 10 / 14
3) Waiting time: 6 / 12 / 24 / 36 months
4) Cost: 500 / 2000 / 4000 / 8000

The DCE has 3 alternatives. Alternative A and B are genomic tests with the above attributes and levels from a previously generated experimental design. Alternative C is a 'status quo' standard testing alternative, which always has 30% chance, 10 clinic visits, 2 year waiting time and zero cost. The levels of A and B overlap with C for all attributes except cost, i.e. alternatives A and B always have non-zero cost, but sometimes have the same chance of diagnosis, number of clinic visits or waiting time.

I am running into problems with model estimation as I am not sure how to specify the dummy-coded attributes and the alternative-specific constant in the model without introducing perfect collinearity and consequently getting NA standard errors. I am currently specifying the model as:

Pr(choice) = chance_35 + chance_45 + chance_55 + visits_2 + visits_6 + visists_12 + wait_6 + wait_12 + wait_24 +
cost + Status_Quo_ASC

Where 30% chance, 16 clinic visits, 36 month wait and 8000 cost are the omitted categories.

A couple of questions:

1) Do I need to dummy code the cost attribute? If so, should I have 4 dummies and 1 omitted category (i.e. levels 0 / 500 / 2000 / 4000 / 8000), or 3 dummies and 1 omitted category (i.e. levels 500 / 2000 / 4000 / 8000)?

2) How can I include the status quo ASC without introducing perfect collinearity? The status quo always has the same levels, so I think this is causing the NA standard errors. Or is there another issue with my model specification?
mabbott
 
Posts: 6
Joined: Sat Nov 19, 2022 2:12 am

Re: Model Specification with a Status Quo Opt-Out Alternativ

Postby Michiel Bliemer » Fri Jan 12, 2024 9:41 am

1. You do not need to dummy code the cost, but you could if you wanted to. To compute willingness to pay it is best to keep cost as a numerical attribute. If you do dummy code cost, which has 4 levels, then you would use 3 dummy coded variables in your utility function that are all equal to zero at the base level.

For example,
Utility = b1_35 * (chance == 35) + b1_45 * (chance == 45) + b1_55 * (chance == 55) + ... + b4_500 * (cost == 500) + b4_2000 * (cost = 2000) + b4_4000 * (cost == 4000)

where you would estimate three parameters b1_35, b1_45, b1_55 for chance and three parameters b4_500, b4_2000, b4_4000 for cost. In your data, you simply have levels 30, 35, 45, 55 for chance and 500, 2000, 4000, 8000 for cost, where in Apollo or Biogeme variables like (chance == 35) are equal to 1 if chance = 35 and 0 otherwise, which automatically creates the dummy variables in the utility function.

2. You can add an ASC to the status quo alternative if the levels of the SQ alternative are also allowed to appear in the other alternatives, for example in the Ngene script below you can see that I added asc_sq to the SQ alternative and the D-error will indicate that you can estimate this model. However, if the levels of the SQ alternative do NOT appear in the other alternatives, then you need to remove these SQ levels from the dummy variables in the other alternatives and only include a constant in the SQ alternative.

Code: Select all
design
;alts = alt1*, alt2*, sq*
;rows = 24
;block = 3
;eff = (mnl,d)
;alg = mfederov
;require:
sq.chance = 30,
sq.visits = 16,
sq.wait = 36,
sq.cost = 8000
;model:
U(alt1) = b1.dummy[0|0|0] * chance[35,45,55,30]      ? chance of diagnosis, base level: 30%
        + b2.dummy[0|0|0] * visits[2,6,12,16]        ? number of clinic visits, base level: 16
        + b3.dummy[0|0|0] * wait[6,12,24,36]         ? waiting time, base level: 36 months
        + b4.dummy[0|0|0] * cost[500,2000,4000,8000] ? cost, base level: 8000
        /
U(alt2) = b1 * chance + b2* visits + b3 * wait + b4 * cost
        /
U(sq)   = asc_sq[0]
        + b1 * chance + b2* visits + b3 * wait + b4 * cost
$


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

Re: Model Specification with a Status Quo Opt-Out Alternativ

Postby linger9085 » Mon Jan 15, 2024 2:26 am

Michiel Bliemer wrote:1. You do not need to dummy code the cost, but you could if you wanted to. To compute willingness to pay it is best to keep cost as a numerical attribute. If you do dummy code cost, which has 4 levels, then you would use 3 dummy coded variables in your utility function that are all equal to zero at the base level.

For example,
Utility = b1_35 * (chance == 35) + b1_45 * (chance == 45) + b1_55 * (chance == 55) + ... + b4_500 * (cost == 500) + b4_2000 * (cost = 2000) + b4_4000 * (cost == 4000)

where you would estimate three parameters b1_35, b1_45, b1_55 for chance and three parameters b4_500, b4_2000, b4_4000 for cost. In your data, you simply have levels 30, 35, 45, 55 for chance and 500, 2000, 4000, 8000 for cost, where in Apollo or Biogeme variables like (chance == 35) are equal to 1 if chance = 35 and 0 otherwise, which automatically creates the dummy variables in the utility function.

2. You can add an ASC to the status quo alternative if the levels of the SQ alternative are also allowed to appear in the other alternatives, for example in the Ngene script below you can see that I added asc_sq to the SQ alternative and the D-error will indicate that you can estimate this model. However, if the levels of the SQ alternative do NOT appear in the other alternatives, then you need to remove these SQ levels from the dummy variables in the other alternatives and only include a constant in the SQ alternative.

Code: Select all
design
;alts = alt1*, alt2*, sq*
;rows = 24
;block = 3
;eff = (mnl,d)
;alg = mfederov
;require:
sq.chance = 30,
sq.visits = 16,
sq.wait = 36,
sq.cost = 8000
;model:
U(alt1) = b1.dummy[0|0|0] * chance[35,45,55,30]      ? chance of diagnosis, base level: 30%
        + b2.dummy[0|0|0] * visits[2,6,12,16]        ? number of clinic visits, base level: 16
        + b3.dummy[0|0|0] * wait[6,12,24,36]         ? waiting time, base level: 36 months
        + b4.dummy[0|0|0] * cost[500,2000,4000,8000] ? cost, base level: 8000
        /
U(alt2) = b1 * chance + b2* visits + b3 * wait + b4 * cost
        /
U(sq)   = asc_sq[0]
        + b1 * chance + b2* visits + b3 * wait + b4 * cost
$


Michiel


Dear Professor, I have learnt your reply.
What I'm a bit confused about is that there seems to be some difference between the example you gave and the cost issue mentioned by Mabbott. While in his DCE, the cost of status quo is 0. Do we not need to consider cost 0 when treating cost as categorical variables?
Hope to receive your guidance. Thank you.
linger9085
 
Posts: 8
Joined: Fri Dec 29, 2023 5:53 pm

Re: Model Specification with a Status Quo Opt-Out Alternativ

Postby Michiel Bliemer » Mon Jan 15, 2024 9:00 am

This was answered in my second response:
"However, if the levels of the SQ alternative do NOT appear in the other alternatives, then you need to remove these SQ levels from the dummy variables in the other alternatives and only include a constant in the SQ alternative."

In other words, you cannot estimate both a constant as well as a coefficient for level 0. So there are three options:
1. Add the constant to the SQ alternative and omit 0 as cost level
2. Omit the constant to the SQ alternative and then include 0 in the dummy coding
3. Consider cost as a numerical attribute, which allows including level 0 as well as a constant

The script for Option 1 is in my earlier response, the script for Options 2 and 3 are below. Option 3 is the best solution.

Code: Select all
design ? Option 2
;alts = alt1*, alt2*, sq*
;rows = 24
;block = 3
;eff = (mnl,d)
;alg = mfederov
;require:
sq.chance = 30,
sq.visits = 16,
sq.wait = 36,
sq.cost = 0
;model:
U(alt1) = b1.dummy[0|0|0]   * chance[35,45,55,30]        ? chance of diagnosis, base level: 30%
        + b2.dummy[0|0|0]   * visits[2,6,12,16]          ? number of clinic visits, base level: 16
        + b3.dummy[0|0|0]   * wait[6,12,24,36]           ? waiting time, base level: 36 months
        + b4.dummy[0|0|0|0] * cost[500,2000,4000,8000,0] ? cost, base level: 0
        /
U(alt2) = b1 * chance + b2* visits + b3 * wait + b4 * cost
        /
U(sq)   = b1 * chance + b2* visits + b3 * wait + b4 * cost
$


Code: Select all
design ? Option 3
;alts = alt1*, alt2*, sq*
;rows = 24
;block = 3
;eff = (mnl,d)
;alg = mfederov
;require:
sq.chance = 30,
sq.visits = 16,
sq.wait = 36,
sq.cost = 0
;reject:
alt1.cost = 0, alt2.cost = 0
;model:
U(alt1) = b1.dummy[0|0|0]   * chance[35,45,55,30]        ? chance of diagnosis, base level: 30%
        + b2.dummy[0|0|0]   * visits[2,6,12,16]          ? number of clinic visits, base level: 16
        + b3.dummy[0|0|0]   * wait[6,12,24,36]           ? waiting time, base level: 36 months
        + b4                * cost[0,500,2000,4000,8000]
        /
U(alt2) = b1 * chance + b2* visits + b3 * wait + b4 * cost
        /
U(sq)   = asc_sq + b1 * chance + b2* visits + b3 * wait + b4 * cost
$


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

Re: Model Specification with a Status Quo Opt-Out Alternativ

Postby linger9085 » Mon Jan 15, 2024 5:21 pm

Thank you, Professor, I have learned a lot. Thank you for your patient guidance.
linger9085
 
Posts: 8
Joined: Fri Dec 29, 2023 5:53 pm


Return to Choice experiments - general

Who is online

Users browsing this forum: No registered users and 6 guests