Labeled vs unlabeled experimental design

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

Moderators: Andrew Collins, Michiel Bliemer, johnr

Labeled vs unlabeled experimental design

Postby MACA » Mon Jul 29, 2019 3:41 am

Labeled vs unlabeled
Hi Ngene community,
I am dealing with an experimental design related with two very different categories of cattle products (feed-iberian ham vs acorn-iberian ham). Consumers are used to choosing one of the two alternatives just due to the noticeable gap in quality and of course the corresponding price gap which roughly is the double for the acorn-iberian vs feed-iberian. In this regard, as you can see in the syntax below the experimental design was conceived to be labeled. Besides the price, three attributes are going to be tested for both alternatives with the particularity that the levels are exactly the same for both feed and acorn-hams. Nonetheless, as we think that the attributes sensitivities can be related with the alternative specific, we have set up different priors for both alternatives. Regarding, the price vectors as they are very different (the price vectors are just coding levels so unlike the rest of the attributes, they are representing very different levels of price despite using the same coding - 0,1,2,3 -) for both alternatives they are set up accordingly.

design
;alts = Feed, Acorn, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;store = all

;model:
U(Feed) = b1[0.2] ? (0.2)
+b2.dummy[(u,0.05,0.1)]*X2[1,0] ? (0.075)
+b3 [(u,0.05,0.15)]*X3[0,1,2,3] ? (0.15)
+b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0] ? (0.15|0.075)
+b5 [(u,-0.25,-0.10)]*X5[0,1,2,3] ? (-0.2625)


/

U(Acorn) = b6[0.05] ? (0.05)
+b7.dummy[(u,0.05,0.20)]*X2[1,0] ? (0.125)
+b8 [(u,0.1,0.25)]*X3[0,1,2,3] ? (0.2625)
+b9.dummy[(u,0.1,0.40)|(u,0.05,0.15)]*X4[2,1,0] ? (0.25|0.1)
+b10 [(u,-0.50,-0.20)]*X10[0,1,2,3]$ ? (-0.525)

So far, I guess that everything is fine taking into account the uncertainty about the priors (we have no clue about them but our own forecast about the relative importance of one attribute over another). The thing is that all the attribute levels are the same for both alternatives but the price, so I was wondering if it would be possible to convert the design into an unlabeled version. To do that, we would create and additional attribute which represents both types of hams in substitution of the ASCs. The issue is that as we noted above the price vector of both hams is totally determined by the type of ham. So, below I provide a tentative version of the unlabeled version just as a framework for sharing my doubts.

Design
;alts=A*, B*, OPT-OUT
;rows=24
;eff = (mnl,d,mean)
;bdraws=gauss(3)
;bseed = 12345
;block=4
;store=all
;model:

U(A) = +b1.dummy[(u,0.05,0.15)] *X1[1,0] ? (0.1)
+b2 [(u,0.05,0.15)] *X2[0,1,2,3] ? (0.15)
+b3.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X3[2,1,0] ? (0.15|0.075)
+b4.dummy[(u,0.05,0.35)] *X4[1,0] ? (0.2) Type of ham
+b5 [(u,-0.60,-0.10)] *X5[0,1,2,3] ? (-0.450) Price
/

U(B) = b1*X1
+b2*X2
+b3*X3
+b4*X4
+b5*X5
/
U(OPT-OUT) = asc[(u,0,0.15)]$

These are my questions:

1). Does it make sense to go for an unlabeled design when the price vectors are alternative specific? If so, how could I do it? In this regard when the X4 attribute in the unlabeled design takes the value 1 the price vector would be: [(u,-0.50,-0.20)] and when it takes the value 0 the price vector would be: [(u,-0.25,-0.10)]. I guess that it is not possible to estimate specific price vectors nested according to the levels of the X4 attribute (acorn-iberian ham vs feed-iberian ham) but I would like to know your opinion.

2) As an alternative to this nested approach of the unlabeled design, I thought in just using the same price vector for both hams with more levels and uncertainty and them to recover the price sensitivity for both qualities making an interaction between b4*b5 (type of ham*price). While this could be feasible econometrically from my point of view the issue would be that the alternatives would be very unrealistic for the consumers since in the real market both types of ham do not display any kind of overlapping region in prices (acorn-iberian ham price is always noticeable higher than feed-iberian ham).

3) For the rest of the attributes to recreate that the consumer attribute sensitivity could be different for both types of ham, I would do the same interacting b4*b1, b2 and b3. In this case, as the attribute levels are the same there is no risk at all of having unrealistic choice tasks. If the interaction was not significant it would mean that there is no "type of ham effect" on attribute sensitivity.

Best wishes
Thank you in advance Professor Bliemer for your willingness to help!
MACA
 
Posts: 13
Joined: Wed Feb 15, 2017 11:47 pm

Re: Labeled vs unlabeled experimental design

Postby Michiel Bliemer » Mon Jul 29, 2019 11:06 pm

I think that you mix up parameters and attributes. The price attribute can have different levels across alternatives, and interactions are not b1*b2 but rather x1*x2.

I slightly rewrote your first syntax where I used different price levels for each type of ham, see below. You should always use the actual attribute levels (e.g. $1, $2, etc) unless you are using dummy or effects coding.

design
;alts = Feed, Acorn, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;store = all
;model:
U(Feed) = b1[0.2]
+ b2.dummy[(u,0.05,0.1)]*X2[1,0]
+ b3[(u,0.05,0.15)]*X3[0,1,2,3]
+ b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0]
+ b5[(u,-0.25,-0.10)]*PRICE_FEED[1,2,3,4] /
U(Acorn) = b6[0.05]
+ b7.dummy[(u,0.05,0.20)]*X2[1,0]
+ b8[(u,0.1,0.25)]*X3[0,1,2,3]
+ b9.dummy[(u,0.1,0.40)|(u,0.05,0.15)]*X4[2,1,0]
+ b10[(u,-0.25,-0.10)]*PRICE_ACORN[2,4,6,8] /
U(out) = 0
$

The syntax above can be rewritten into an unlabelled experiment with generic coefficients such as below, where I introduced HAMTYPE as a new attribute. Note that the prior values for asc and btype follow from the b1 and b6 constants in the syntax above. I used conditional constraints to ensure that each type of ham has the appropriate price levels.

design
;alts = A*, B*, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;cond:
if(a.hamtype=1, a.price = [1,2,3,4]),
if(b.hamtype=1, b.price = [1,2,3,4]),
if(a.hamtype=0, a.price = [2,4,6,8]),
if(b.hamtype=0, b.price = [2,4,6,8])
;store = all
;model:
U(A) = asc[0.05]
+ btype[0.15]*HAMTYPE[0,1] ? 1 = Feed, 0 = Acorn
+ b2.dummy[(u,0.05,0.1)]*X2[1,0]
+ b3[(u,0.05,0.15)]*X3[0,1,2,3]
+ b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0]
+ b5[(u,-0.25,-0.10)]*PRICE[1,2,3,4,6,8] /
U(B) = asc
+ btype*HAMTYPE
+ b2*X2
+ b3*X3
+ b4*X4
+ b5*PRICE /
U(out) = 0
$

If you would like to estimate different price parameters for each type of ham you can create interaction effects such as in the syntax below. If b6 has a negative prior then people are more price sensitive for feed type ham.

design
;alts = A*, B*, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;cond:
if(a.hamtype=1, a.price = [1,2,3,4]),
if(b.hamtype=1, b.price = [1,2,3,4]),
if(a.hamtype=0, a.price = [2,4,6,8]),
if(b.hamtype=0, b.price = [2,4,6,8])
;store = all
;model:
U(A) = asc[0.05]
+ btype[0.15]*HAMTYPE[0,1] ? 1 = Feed, 0 = Acorn
+ b2.dummy[(u,0.05,0.1)]*X2[1,0]
+ b3[(u,0.05,0.15)]*X3[0,1,2,3]
+ b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0]
+ b5[(u,-0.25,-0.10)]*PRICE[1,2,3,4,6,8]
+ b6*PRICE*HAMTYPE /
U(B) = asc
+ btype*HAMTYPE
+ b2*X2
+ b3*X3
+ b4*X4
+ b5*PRICE
+ b6*PRICE*HAMTYPE /
U(out) = 0
$

Note that i did not run/test the syntax, but hopefully this answers your questions.

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

Re: Labeled vs unlabeled experimental design

Postby MACA » Tue Jul 30, 2019 6:25 pm

Michiel Bliemer wrote:I think that you mix up parameters and attributes. The price attribute can have different levels across alternatives, and interactions are not b1*b2 but rather x1*x2.

Dear Professor,
Thank so much in advance for your answer and sorry for the mistake since the interactions are between attributes being the parameter the econometric expression of this.


I slightly rewrote your first syntax where I used different price levels for each type of ham, see below. You should always use the actual attribute levels (e.g. $1, $2, etc) unless you are using dummy or effects coding.

I think I did not explain myself adequately since I was using dummy coding for the price vector. When obtaining experimental designs what it matters from my point of view is the relative importance of the attributes in utils. In this regard, I do not see the difference between both versions:

Your suggestion rises the relative importance of the price vector regarding the rest of the attributes but the marginal rate of substitution in terms of utility between both price vectors is invariant –2-:

+ b5[(u,-0.25,-0.10)]*PRICE_FEED[1,2,3,4] | Average utility = 0.4374

+ b10[(u,-0.25,-0.10)]*PRICE_ACORN[2,4,6,8] | Average utility = 0.875

Previous syntax (I employed dummy coding so same MRS of 2 but less importance conceded to the price vectors regarding the rest of the attributes):

+ b5[(u,-0.25,-0.10)]*PRICE_FEED[0,1,2,3] | Average utility = 0.2625

+ b10[(u,-0.50,-0.20)]*PRICE_ACORN[0,1,2,3] | Average utility = 0.525

Anyway, following your advice I should have used the actual levels of the price vector (euros per 100 grams):

+ b5[(u,-0.060,-0.020)]*PRICE_FEED[5,6.5,8,9.5] | Average utility = 0.29

+ b10[(u,-0.051,-0.021)]*PRICE_ACORN[14,15.5,17,18.5] | Average utility = 0.585

So sorry in advance for being sometimes repetitive putting several examples but I found interesting this strategy thinking in the newcomers of the forum (at least it worked for me!).


design
;alts = Feed, Acorn, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;store = all
;model:
U(Feed) = b1[0.2]
+ b2.dummy[(u,0.05,0.1)]*X2[1,0]
+ b3[(u,0.05,0.15)]*X3[0,1,2,3]
+ b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0]
+ b5[(u,-0.25,-0.10)]*PRICE_FEED[1,2,3,4] /
U(Acorn) = b6[0.05]
+ b7.dummy[(u,0.05,0.20)]*X2[1,0]
+ b8[(u,0.1,0.25)]*X3[0,1,2,3]
+ b9.dummy[(u,0.1,0.40)|(u,0.05,0.15)]*X4[2,1,0]
+ b10[(u,-0.25,-0.10)]*PRICE_ACORN[2,4,6,8] /
U(out) = 0
$

The syntax above can be rewritten into an unlabelled experiment with generic coefficients such as below, where I introduced HAMTYPE as a new attribute. Note that the prior values for asc and btype follow from the b1 and b6 constants in the syntax above. I used conditional constraints to ensure that each type of ham has the appropriate price levels.

In this point I have much more concerns. The first one is related with the advantage of using ASCs when the label of the alternative would be A, B and OPT-OUT. I guess that they can be removed and maybe assigning the ASC to the OPT-OUT option. Am I neglecting something?

On the other hand, what I meant in my previous mail is that using this design I would not be able to retrieve different marginal sensitivities for the attributes due to the unlabeled design ("common parameters' estimation"). That is, I would have only one parameter for each attribute, wouldn’t I? Econometrically speaking (regardless of the software employed), what I would like to know are the implications for the price parameter estimation when nesting the price levels inside another attribute (hamtype). I do not see any way of having different sensitivities for both hamtypes apart from interaction terms.


This would be the real conditions:
if(a.hamtype=1, a.price = [5,6.5,8,9.5]),
if(b.hamtype=1, b.price = [5,6.5,8,9.5]),
if(a.hamtype=0, a.price = [14,15.5,17,18.5]),
if(b.hamtype=0, b.price = [14,15.5,17,18.5])



design
;alts = A*, B*, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;cond:
if(a.hamtype=1, a.price = [1,2,3,4]),
if(b.hamtype=1, b.price = [1,2,3,4]),
if(a.hamtype=0, a.price = [2,4,6,8]),
if(b.hamtype=0, b.price = [2,4,6,8])
;store = all
;model:
U(A) = asc[0.05]
+ btype[0.15]*HAMTYPE[0,1] ? 1 = Feed, 0 = Acorn
+ b2.dummy[(u,0.05,0.1)]*X2[1,0]
+ b3[(u,0.05,0.15)]*X3[0,1,2,3]
+ b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0]
+ b5[(u,-0.25,-0.10)]*PRICE[1,2,3,4,6,8] /
U(B) = asc
+ btype*HAMTYPE
+ b2*X2
+ b3*X3
+ b4*X4
+ b5*PRICE /
U(out) = 0
$

If you would like to estimate different price parameters for each type of ham you can create interaction effects such as in the syntax below. If b6 has a negative prior then people are more price sensitive for feed type ham.

Thanks again professor Bliemer! Anyway, I am thinking that if I see the experiment as labelled because I think the sensitivities of the attributes can be conditioned by the type of ham (the type of ham itself can condition the choice), I guess that I should go for the labelled version with alternative specific parameters. In case, there were no differences in sensitivities I will always be able to restrict the model estimating the same parameters for both labelled alternatives.

design
;alts = A*, B*, Out
;rows = 24
;con
;block = 4
;bdraws = gauss(3)
;eff = (mnl,d,mean)
;cond:
if(a.hamtype=1, a.price = [1,2,3,4]),
if(b.hamtype=1, b.price = [1,2,3,4]),
if(a.hamtype=0, a.price = [2,4,6,8]),
if(b.hamtype=0, b.price = [2,4,6,8])
;store = all
;model:
U(A) = asc[0.05]
+ btype[0.15]*HAMTYPE[0,1] ? 1 = Feed, 0 = Acorn
+ b2.dummy[(u,0.05,0.1)]*X2[1,0]
+ b3[(u,0.05,0.15)]*X3[0,1,2,3]
+ b4.dummy[(u,0.05,0.25)|(u,0.05,0.10)]*X4[2,1,0]
+ b5[(u,-0.25,-0.10)]*PRICE[1,2,3,4,6,8]
+ b6*PRICE*HAMTYPE /
U(B) = asc
+ btype*HAMTYPE
+ b2*X2
+ b3*X3
+ b4*X4
+ b5*PRICE
+ b6*PRICE*HAMTYPE /
U(out) = 0
$

Note that i did not run/test the syntax, but hopefully this answers your questions.

Thank you so much Michiel! I hope all of this is useful for the Ngene community users too!

Michiel


Kind regards
MACA
 
Posts: 13
Joined: Wed Feb 15, 2017 11:47 pm

Re: Labeled vs unlabeled experimental design

Postby Michiel Bliemer » Tue Jul 30, 2019 9:19 pm

Yes maybe the labelled experiment is then more what you are looking for.
You did not specify dummy coding for the price parameter in your original syntax, otherwise it would have been b5.dummy, so that is why i changed it to linear coding.

Regarding the ASCs, the way I did it is the only way of doing it, you cannot remove constants and the prior values were calculated to be consistent with your original syntax. Note that the dummy reference level is equal to the ASC and that the other ASC is calculated by adding the dummy coded coefficient. There is a lot of information on dummy coding in the literature (it is also used for linear regression models).

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


Return to Choice experiments - general

Who is online

Users browsing this forum: No registered users and 6 guests

cron