Setting Design Constraints and Criteria for Equal Att. Level

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

Moderators: Andrew Collins, Michiel Bliemer, johnr

Setting Design Constraints and Criteria for Equal Att. Level

Postby bbryseck » Wed Feb 03, 2021 8:13 pm

Hello,

I have the following design below in NGene. The objective is to understand what level of information precision people prefer on 7 public transport information attributes. The precision levels are exact=1, estimate=2, or none (no information given)=100. (For example you could have exact departure times, estimated times based on timetables, or no information at all).

My goal is to ensure that both alt1 and alt2 have the same number of 'none' information types, as I do not want respondents making choices based on an alternative with less 'no information' given than the other alternative, as they have been in a pilot where 'none' was uneven across the two alternatives. I do not want to define how many 'no information' attribute levels are given in any choice set. I've put the below design into NGene, playing around with the value in bold+italics below. However, I keep getting 'Undefined' designs at any value less than 97 or otherwise an ineffective design result given my goal. Is there a different way to approach this design conundrum?

Many thanks for your help!

Design
;alts = alt1*, alt2*
;rows = 24
;block = 6
;eff = (mnl, d)

;alg = mfederov
;require:

alt1.fare + alt1.departure + alt1.arrival + alt1.frequency + alt1.safeon + alt1.safewait + alt1.safewalk > alt2.fare + alt2.departure + alt2.arrival + alt2.frequency + alt2.safeon + alt2.safewait + alt2.safewalk - 88,
alt1.fare + alt1.departure + alt1.arrival + alt1.frequency + alt1.safeon + alt1.safewait + alt1.safewalk < alt2.fare + alt2.departure + alt2.arrival + alt2.frequency + alt2.safeon + alt2.safewait + alt2.safewalk + 88

;model:
U(alt1) =
+ b2.dummy[-0.1|0.1] * departure[100,1,2] ? 100 = none, 1 = exact, 2 = estimate
+ b3.dummy[-0.1|0.1]* arrival[100,1,2]
+ b4.dummy[-0.1|0.1] * frequency[100,1,2]
+ b5.dummy[-0.1] * safeon[100,1] ? 100 = none, 1 = exact
+ b6.dummy[-0.1] * safewalk[100,1]
+ b7.dummy[-0.1] * safewait[100,1]
+ b8.dummy[-0.1|0.1] * fare[100,1,2]
/
U(alt2) = b2 * departure
+ b3 * arrival
+ b4 * frequency
+ b5 * safeon
+ b6 * safewalk
+ b7 * safewait
+ b8 * fare

$
bbryseck
 
Posts: 6
Joined: Mon Sep 21, 2020 11:44 pm

Re: Setting Design Constraints and Criteria for Equal Att. L

Postby bbryseck » Wed Feb 03, 2021 10:16 pm

I've just tried the following design in Ngene, which gives me a design that has equal 'none' attribute levels in both alternatives, BUT only gives me one design and says S-error and MNL error are "Undefined".

Code: Select all
Design
;alts = alt1*, alt2*
;rows = 24
;block = 6
;eff = (mnl, d)

;alg = mfederov
;require:

alt1.fare + alt1.departure + alt1.arrival + alt1.frequency + alt1.safeon + alt1.safewait + alt1.safewalk - alt2.fare - alt2.departure - alt2.arrival - alt2.frequency - alt2.safeon - alt2.safewait - alt2.safewalk < 100 and alt1.fare + alt1.departure + alt1.arrival + alt1.frequency + alt1.safeon + alt1.safewait + alt1.safewalk - alt2.fare - alt2.departure - alt2.arrival - alt2.frequency - alt2.safeon - alt2.safewait - alt2.safewalk > -50 and alt2.fare + alt2.departure + alt2.arrival + alt2.frequency + alt2.safeon + alt2.safewait + alt2.safewalk - alt1.fare - alt1.departure - alt1.arrival - alt1.frequency - alt1.safeon - alt1.safewait - alt1.safewalk < 100 and alt2.fare + alt2.departure + alt2.arrival + alt2.frequency + alt2.safeon + alt2.safewait + alt2.safewalk - alt1.fare - alt1.departure - alt1.arrival - alt1.frequency - alt1.safeon - alt1.safewait - alt1.safewalk > -50

;model:
U(alt1) =
   + b2.dummy[-0.1|0.1] * departure[100,1,2]    + b3.dummy[-0.1|0.1]* arrival[100,1,2]
   + b4.dummy[-0.1|0.1] * frequency[100,1,2]
   + b5.dummy[-0.1] * safeon[100,1]    + b6.dummy[-0.1] * safewalk[100,1]
   + b7.dummy[-0.1] * safewait[100,1]
   + b8.dummy[-0.1|0.1] * fare[100,1,2]
        /
U(alt2) = b2 * departure
        + b3 * arrival
        + b4 * frequency
        + b5 * safeon
        + b6 * safewalk
        + b7 * safewait
        + b8 * fare

$
bbryseck
 
Posts: 6
Joined: Mon Sep 21, 2020 11:44 pm

Re: Setting Design Constraints and Criteria for Equal Att. L

Postby Michiel Bliemer » Tue Feb 23, 2021 7:47 am

I fixed a couple of syntax issues, see below. (I removed "and" in ;require and replaced by a comma, and I removed "+" after U(alt1) =).
The undefined D-error stems from the constraints, they seem to put too many constraints on the design, leading to data with which the model parameters can no longer be estimated. If I remove for example the second constraint then the model can be estimated again. So please make sure that you are not over-constraining the design.

Btw, I am not sure what you mean with equal 'none' attributes, I could not find attribute or alternative 'none' in your code. If you want an optout alternative, you need to add none to ;alts and you need to add a constant to alt1 and alt2.

Code: Select all
Design
;alts = alt1*, alt2*
;rows = 24
;block = 6
;eff = (mnl, d)

;alg = mfederov
;require:

alt1.fare + alt1.departure + alt1.arrival + alt1.frequency + alt1.safeon + alt1.safewait + alt1.safewalk - alt2.fare - alt2.departure - alt2.arrival - alt2.frequency - alt2.safeon - alt2.safewait - alt2.safewalk < 100,
?alt1.fare + alt1.departure + alt1.arrival + alt1.frequency + alt1.safeon + alt1.safewait + alt1.safewalk - alt2.fare - alt2.departure - alt2.arrival - alt2.frequency - alt2.safeon - alt2.safewait - alt2.safewalk > -50,
alt2.fare + alt2.departure + alt2.arrival + alt2.frequency + alt2.safeon + alt2.safewait + alt2.safewalk - alt1.fare - alt1.departure - alt1.arrival - alt1.frequency - alt1.safeon - alt1.safewait - alt1.safewalk < 100,
alt2.fare + alt2.departure + alt2.arrival + alt2.frequency + alt2.safeon + alt2.safewait + alt2.safewalk - alt1.fare - alt1.departure - alt1.arrival - alt1.frequency - alt1.safeon - alt1.safewait - alt1.safewalk > -50

;model:
U(alt1) = b2.dummy[-0.1|0.1] * departure[100,1,2]   
        + b3.dummy[-0.1|0.1]* arrival[100,1,2]
        + b4.dummy[-0.1|0.1] * frequency[100,1,2]
        + b5.dummy[-0.1] * safeon[100,1]   
        + b6.dummy[-0.1] * safewalk[100,1]
        + b7.dummy[-0.1] * safewait[100,1]
        + b8.dummy[-0.1|0.1] * fare[100,1,2]
        /
U(alt2) = b2 * departure
        + b3 * arrival
        + b4 * frequency
        + b5 * safeon
        + b6 * safewalk
        + b7 * safewait
        + b8 * fare

$


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


Return to Choice experiments - general

Who is online

Users browsing this forum: No registered users and 17 guests