I am trying to replicate my colleague's NLOGIT analysis using R. This analysis was for a discrete choice experiment in which fisherman chose whether to opt into a hypothetical environmental protection program. At baseline, there was limited protection and diminished resource availability. We offered them various alternative packages in which they would be paid to protect the area, but would have less access to the resource (fish).

My issue is that I am hoping to only have one constant (ASC) and to specify the status quo option (always alternative 3) from our unlabeled choice experiment as the baseline level. Using mlogit package, it seems to always generate n-1 constants (where n is number of alternatives) or 0 constants depending on the option you use. I have three dependent variables, but I only want one constant (because alternatives 1 and 2 have no unobserved differences from each other, they both represent the same environmental program but with different parameters).

My question is: How do I limit to one constant (intercept) and how do I specify which alternative that intercept should be referencing?

Here are screenshots of code and the dataset (in long format where each line represents an alternative and a respondent is making a choice to select one of the three lines): Data:

enter image description here

Code: enter image description here

Results: enter image description here

In comparison, my colleague's results (with one constant): enter image description here

As you can see, the results are similar but not the same due to the issue with having two intercepts (my guess for why they differ). I am trying to replicate results of this project in hopes of using R in our next project because more people will have access to our data if we use that program.



1 Answer 1


I've done this by adding the corresponding indicator in the data frame and then removing the intercept from the model. Here it would mean, in order to have the alternative specific constant on alternative 3, adding

df['asc'] <- 1*(df['alter'] == 3)

before the mlogit.data-call, and then using the formula

f <- mFormula(choice ~ -1 + asc + future_resource + obligations + 
                       cond_access + restricted + payment)

in the estimation.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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