I'm having trouble figuring out how to correctly calculate conjoint part-worth-utility from a discrete choice experiment.
I have recently run a pilot study to analyse in R where I used the packages “support.CEs” and “survival” and I’m trying to figure out how to calculate conjoint part-worth-utilities from the coefficients, but not sure I’m doing it correctly.
For simplicity sake I will use a simplified example about rice to explain my problem.
The experiment contains the following attributes and levels.
Region = c("RegA", "RegB", "RegC"),
Cultivation = c("Conv", "NoChem", "Organic"),
Price = c("1700", "2000", "2300")),
I then used the clogit()
function to analyse the results of the experiment using the following model:
RES ~ ASC + RegB + RegC + NoChem + Organic + Price + strata(STR)
This gave the following result:
coef exp(coef) se(coef) z p
ASC 4,443 85,035 0,483 9,199 0,00E+00
RegB 0,469 1,599 0,137 3,417 6,30E-04
RegC 0,968 2,632 0,108 8,996 0,00E+00
NoChem 0,752 2,120 0,177 4,257 2,10E-05
Organic 1,165 3,205 0,141 8,252 1,10E-16
Price -0,002 0,998 0,000 -9,732 0,00E+00
Now my assumption is that the part-worth-utilities for each attribute level is simply the corresponding coefficients, with the remaining level not part of the model (RegA
for the Region attribute) being 0?
However, while looking at another R package called conjoint
, devised to analyse rating based conjoint, I noticed that they determined the last levels value in a different way:
# Example 1
library(conjoint)
data(herbata)
ul<-caUtilities(hpref,hprof,hlevn)
print(ul)
To find the remaining levels utility they take the sum of all other levels in the attribute and subtract it from 0, meaning RegA
would have an utility of -1,437 instead of 0.
0 - (0,469 + 0,968) = -1,437
I can't quite figure out the logic behind this as it seems to considerably widen the distance in utility between RegA
and RegB/RegC
while keeping the distance between RegA
and RegC
fixed.
At first I dismissed this as being a mistake, however I then saw that the example for the ChoiceModelR
package also calculated the remaining attribute levels as the inverse sum of the rest.
Is this truly the correct way to determine the utility of the remaining attribute level?
Secondary question:
If so, how is the result of say the “marginal willingness to pay” function mwtp() reliable, when it would sets RegA
as 0?