rnon-linear-regressionmlogit

Partially Degenerate Nested Logit in R (Currently trying Mlogit, but open to other packages)


I am trying to run a Nested Logit with a partial degeneracy. That means that one of my lower nests only had one option. Graphically, this is represented by the picture below [not my picture, it is from Hunt (2000)].

enter image description here

In my case, the upper nest is the choice between clearing the land or keeping it as forest. The lower nest associated with clearing has multiple options (different crops) while the lower nest associated with forest includes only forest as an option, hence its degeneracy.

The fact that I have a partially degenerate nested logit implies that I have to normalise the inclusive value parameters (log-sum coefficients following the terminology in the mlogit package) in a specific way following Hunt (2000). For an example of a paper where this is done [and that is much easier to understand than Hunt (2000)] see Plantinga et al. (2013). Looking at the papers is not important for answering the question, just leaving them here as reference.

My question is: How can I using the mlogit package in R normalise the inclusive value parameter (log-sum coefficient) of one of my lower nests to 1 (in particular, the one for the degenerate nest) while keeping the other one being estimated from the data? This means I am interested in separate log-sum coefficients for each nest (as one would get with the option un.nest.el = FALSE), but I want to be able to set one of them to 1.

I am currently trying to do this in the mlogit package just because that the package I have been using for estimating nested logits in R. However, if you know a solution using another package (such as nnet or globaltest) I am interested in it, since I can change the package I am currently using.

Thanks for your help!


Solution

  • It took me some time to figure this out, but the option constPar in the mlogit() command is the way to go. Below is an example:

    model_output <- mlogit(y ~ x1 + x2,
                         data = ml_data,
                         reflevel = "alt1",
                         nests = list(nest1 = c("alt2", "alt3", "alt4"),
                                      nest2 = c("alt1")),
                         un.nest.el = FALSE, constPar = c("iv:nest2" = 1))