I followed the recipe of a stated-choice experiment in political science https://doi.org/10.1093/pan/mpt024 (they call it "conjoint" but I think this term is debated).

In the end I made the following stated-choice experiment about public good provision. This is also how I discovered a lot of economics and transport economics literature on the subject, which now confuses me.

Respondents get two public goods (described by 2 attributes and a price (tax), that is 3 attributes, and they all have very different levels).

These are the attributes:

publicgoodtype_levels <- c( "Library", "Child-care", "Park","Museum" )

price_levels <- c("1", "5", "10","15", "20", "25") #in monthly tax increase

buildingtime_levels <- c("120 months", "60 months", "30 months", ...) There is actually around 30 time attributes in a fully randomised full-factorial design. However the n is large, so I hope it is not the problem.

I found an R package, I used and got quite understandable results, it is called "CREGG". However, it does not allow that any of the model inputs (in my case, price) to be imputed as a number, all inputs need to be factors (so the model creates dummies).

I want to calculate the willingness-to-pay so I decided I need to use another package. A way to calculate the willingness-to-pay is the following: Use a model "... where we estimate a single parameter for price, we can compute the average willingness-to-pay for a particular level of an attribute by dividing the coefficient for that level by the price coefficient." https://link.springer.com/chapter/10.1007/978-3-030-14316-9_13 This is why I want a numerical input for my price variable.

The book uses mlogit package. (However, I am not sure they look at binary cases, as in my example where respondents always only compare 2 goods and are forced to decide for one. (Each respondent does this comparison of 2 for multiple times in a row. In total 16 goods are evaluated (8 pairs-->8 decisions made).)

However, there is a small problem, when I use the R package "mlogit" , this is my model:

 buggymodel <- mlogit (choice ~   0 + publicgoodtype + buildingtime + priceasanumber, data = dataframewithdata )

This always leads to the error, as soon as I include building time. Error in solve.default(H, g[!fixed]) : system is computationally singular: reciprocal condition number = 1.7958e-19

So, I guess I need another model. I went back to basics and decided: a logit model it is!

glm(choice ~ publicgoodtype + buildingtime + priceasanumber, data = dataframewithdata,family = binomial(link = "logit"))

While this model seems fine, I still wonder: How could I introduce the information, that people did multiple comparisons? And this basically leads to the title? How do I decide for the right model? The pol-sci folks seem to use OLS but in other disciplines they use so fancy models. I am deeply confused and would like to find help on this issue.

Thank you so much!

  • 1
    $\begingroup$ What does the choice variable looks like? $\endgroup$ – Guilherme Marthe Feb 11 at 20:29
  • $\begingroup$ Binary. 1 if chosen, 0 otherwise! $\endgroup$ – canIchangethis Feb 11 at 20:29

While I'm no expert in choice modeling, I believe I know enough about GLM's and have read a thing or two about choice modeling and I think I can help you.

If your response is binary, it doesn't make sense to use a multinomial logit. A multinomial logit is, under the hood, a bunch of logistic regressions of one vs all other categories.

I don't know how your data is organized, nor what is the standard in choice modeling, but if the respondent was confronted with 2 products, and each of them has a few characteristics each with a different factor, your data should be organized in the following manner:

choice respondent_id publicgoodtype1 publicgoodtype2 price1 price2
1 1 Library Park 5 10
0 1 Museum Park 10 25
1 2 Museum Library 10 5

Where choice may be standardized as 'chose the first option or not'. This way, we have the covariates of both products determining the choice. If the product has a name, such as product A which is a library, product B which is a museum, and product C which is a park, each with its own characteristics, we can set up the table for a multinomial logit as:

choice respondent_id publicgoodtype1 publicgoodtype2 price1 price2
A 1 Library Park 5 10
C 1 Museum Park 10 25
B 2 Museum Library 10 5

With this setup, I believe you are able to calculate willingness-to-pay.

  • $\begingroup$ Thank you so much! My data is structured a bit different, it's more of a "long" format, that is I have person; side (dummy either 1 or 2); choice (1 if chose, 0 otherwise);publicgoodtype;price;timeneeded. => For each person I have 16 lines under each other. $\endgroup$ – canIchangethis Feb 11 at 21:01
  • $\begingroup$ And a second point: In some cases you get the same product (say library) just time and price vary. Some even have the same price, so only time varies (to check people do not answer randomly, but not everyone got one of these, they are all fully randomised)! Do you think that changes something in your answer? $\endgroup$ – canIchangethis Feb 11 at 21:03
  • $\begingroup$ Yeo, I think the design is clear. Not all factors change in a single comparison. When using the table in the format you have, you model the chance/probability of choosing or not an option given its characteristics solely. That is, "if the price is higher, the lower the probability of choosing". If you want to convey the fact that the person had two choices, I think the covariate per choice format makes more sense. You can even derive some variables such as price/time to build a difference/ratio between the options. And it shouldn't be troublesome to convert from a long to a wider format $\endgroup$ – Guilherme Marthe Feb 12 at 13:06
  • $\begingroup$ Thank you for your comment! Thank you so much @guihermemarthe After carful thought I think it's not necessary to include the 2 choice option (1 choice) in the model itself. Would you cluster the data in the glm comment somehow, as everyone has repeated observations per person? $\endgroup$ – canIchangethis Feb 12 at 13:08
  • $\begingroup$ It makes sense to insert some random effects if you think there is relevant heterogeneity among the respondents. If, for example, a person is naturally more reluctant to choose libraries since they don't know how to read or different price sensibilities due to income considerations. In those cases, a mixed glm can help distinguish between individual effects and population effects, and can even find marginal effects with the propper manipulations. One can fit those in lme4, gamlss, or go for a Bayesian approach with brms or rstanarm $\endgroup$ – Guilherme Marthe Feb 12 at 14:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.