Page 1 of 1
Orthogonal design with categorical nominal attributes
Posted:
Fri Oct 21, 2022 11:04 pm
by simone.manfredi
Dear all,
I am trying to set up an experiment including a categorical nominal attribute.
I couldn't find any example, then I would like to ask whether is it possible to adopt an orthogonal design with a categorical nominal attribute. In that case, how should I code the categorical nominal levels of the attribute?
By way of example, I am interested in care provision to elderly people. Then, I would have 3 attributes:
1. Number of hours of care provision in a month: 20, 40, 60
2. Typology of care provided: health care, social care, a mix of the two
3. Monthly charge (€): 120, 240, 360
Can I code the second attribute in this way: 0 (-> health care), 1 (-> social care), 2 (-> a mix)?
I provide an example of my syntax:
Design
;alts = alt1, alt2
;rows = 9
;orth = ood
;model:
U(alt1) = b1 * A[20, 40, 60] + b2 * B[0, 1, 2] + b3 * C[120, 240, 360] /
U(alt2) = b1 * A[20, 40, 60] + b2 * B[0, 1, 2] + b3 * C[120, 240, 360]
$
Thank you so much!
Simone
Re: Orthogonal design with categorical nominal attributes
Posted:
Tue Nov 01, 2022 10:00 am
by Michiel Bliemer
Sorry for the delayed response, I was on holidays for a week
For an orthogonal design, it does not matter whether an attribute is numerical or categorical and you syntax is fine, but when estimating a model you clearly need to use dummy or effects coding for categorical variables. Instead of an orthogonal design, you could also use an efficient design with near-zero priors where you can optimise the design specifically for dummy of effects coding. The other advantage of such an efficient design is that it can avoid dominant alternatives where the attribute levels of one alternative are all better than the other alternative in a choice task. This can be achieved by indicating the preference order of the attribute levels via small positive and negative parameter values such as below. Note that with dummy/effects coding, Ngene assumes that the LAST level is the base level, and I assumed level 0 to be the base. I do not know the preference order of health, social care, and mix, but in the example below I assumed that the preference order is mix > health care > social care. You can change the priors to reflect another order. The asterisks (*) after each alternative name indicate that these alternatives are generic such that Ngene will check for dominance.
Design
;alts = alt1*, alt2*
;rows = 9
;eff = (mnl,d)
;model:
U(alt1) = b1[0.0001] * A[20, 40, 60] + b2.dummy[-0.001|0.001] * B[1, 2, 0] + b3[-0.0001] * C[120, 240, 360] /
U(alt2) = b1[0.0001] * A[20, 40, 60] + b2.dummy[-0.001|0.001] * B[1, 2, 0] + b3[-0.0001] * C[120, 240, 360]
$
Michiel
Re: Orthogonal design with categorical nominal attributes
Posted:
Fri Nov 04, 2022 7:56 am
by simone.manfredi
Dear Michiel,
thank you so much for your kind support.
I hope you have enjoyed your holidays!
A) As you mentioned, indeed we are facing some dominance issues adopting an orthogonal design. In the case we proceed with an orthogonal design, could you mention some possible solutions to dominant alternatives? Can we add any rule in the syntax to this extent?
B) On the way round, in the case we proceed with an efficient design to solve dominant alternatives, we do have some doubts:
1. Adopting the mnl design will force us to adopt the same model for the analysis?
2. Our key issue is that we don’t know the preference order of our categorical nominal attribute: Unfortunately, we have no evidence to expect social, health or mix care to be preferred. Does this force us to adopt an orthogonal design instead of an efficient one, then? If not, how can we set the prior in this case?
3. Are 9 choice task enough in this case?
I provide our full example with 4 attributes:
1. Number of hours of care provision in a month: 15, 30, 45
2. Typology of care provided: 0 “health care”, 1 “social care”, 2 “a mix of the two”
3. Provision of mutual-help group for caregivers (categorical): 0, 1, 2
4. Monthly charge (€): 120, 240, 360
Only for attribute 2 (typology of care provided) we do not know the order preference.
Then, I would like to ask you whether the following syntax work and how to set the prior for the dummies:
Design
;alts = alt1*, alt2*
;rows = 9
;eff = (mnl,d)
;model:
U(alt1) = b1[0.0001] * A[15, 30, 45] + b2.dummy[?] * B[1, 2, 0] + b3.dummy[-0.001 | 0.001] * C[1, 2, 0] + b4[-0.0001] * D[120, 240, 360] /
U(alt2) = b1[0.0001] * A[15, 30, 45] + b2.dummy[?] * B[1, 2, 0] + b3.dummy[-0.001 | 0.001] * C[1, 2, 0] + b4[-0.0001] * D[120, 240, 360]
$
In the end, we have noticed that adopting an mnl design, in some of the choice task an attribute may present the same level in both the different two alternatives, while an orthogonal design doesn't. Is this fine?
Thank you so much!
Simone
Re: Orthogonal design with categorical nominal attributes
Posted:
Fri Nov 04, 2022 8:45 am
by Michiel Bliemer
A) When using an orthogonal design, you need to manually check for dominant alternatives and remove them manually from your design. The result is a design that is no longer orthogonal.
B)
1. The efficient design will be most efficient for the MNL that was specified at the design stage, but is expected to also be efficient when estimating more advanced models. The closer the priors are to the true parameter values, the more efficient the design will be. Usually a pilot study can give you more accurate priors. An orthogonal design is often not efficient for any model, so you are many cases still better off using an efficient design, especially if you have priors from a pilot study.
2. You could set all priors to zero for the categorical attribute, then dominance is only avoided based on the remaining attributes.
3. The minimum number of choice tasks that you need is 6 for your design, so 9 will work. But I generally recommend a larger number to increase variation in your data, which allows you to estimate more advanced models. I typically suggest 3 times the minimum, so 3*6 = 18. So you could use ;rows = 9 and ;block = 2.
The fact that there is some attribute level overlap across alternatives is because the efficient design is avoiding dominant alternatives, whereas the orthogonal design is not. You can switch to the modified Federov algorithm and you will see that the overlap becomes very minimal. You will need to impose attribute level constraints for at least the numerical attributes to guarantee some level of attribute level balance. You could also use (4-8,4-8,4-8) to allow more flexibility. Dummy coded variables typically exhibit a high degree of attribute level balance as this is an automatic result of an efficient design where a separate parameter is estimated for each level.
Script:
- Code: Select all
Design
;alts = alt1*, alt2*
;rows = 18
;block = 2
;eff = (mnl,d)
;alg = mfederov
;model:
U(alt1) = b1[0.0001] * A[15, 30, 45](6,6,6)
+ b2.dummy[0|0] * B[1, 2, 0]
+ b3.dummy[-0.001 | 0.001] * C[1, 2, 0]
+ b4[-0.0001] * D[120, 240, 360](6,6,6)
/
U(alt2) = b1 * A + b2 * B + b3 * C + b4 * D
$
Michiel
Re: Orthogonal design with categorical nominal attributes
Posted:
Mon Nov 07, 2022 10:01 pm
by simone.manfredi
Dear Michiel,
thank you so much for your kind support to clarify our doubts.
I would like to ask a last clarification regarding the prior for categorical nominal attributes.
In the example we have:
b3.dummy[-0.001 | 0.001] * C[1, 2, 0]
In case the order of preferences (from low to high) is 0 -> 1 -> 2, then why the first prior is negative?
I thought the correct syntax may be:
b3.dummy[-0.001 | 0.001] * C[0, 2, 1]
Thank you again
Simone
Re: Orthogonal design with categorical nominal attributes
Posted:
Tue Nov 08, 2022 12:27 pm
by Michiel Bliemer
You defined:
0 = health care
1 = social care
2 = a mix
I assumed in my example that health care is the base level, and that social case is least preferred and that a mix is most preferred. Then you get:
b3.dummy[-0.001 | 0.001] * C[1, 2, 0] where health care has utility 0 (base), social care has utility -0.001 (least preferred) and a mix has utility 0.001 (most preferred).
In your syntax you are assuming that social care is the base level:
b3.dummy[-0.001 | 0.001] * C[0, 2, 1], where social case has utility 0 (base), health care has utility -0.001 (least preferred) and a mix has a utility of 0.001 (most preferred).
So in your example the preference order is different from the order that I assumed in my example (I assumed 1>0>2, you assume 0>1>2). If you change the preference order and change the base level, the syntax will look different.
Michiel