[R] error message "system is computationally singular" under mlogit

Franckx Laurent laurent.franckx at vito.be
Wed Jan 29 16:33:18 CET 2014

Dear all,

I am trying to estimate a multinomial logit model with mlogit.

The data I use for the estimation have the following format (in the full data set, there are many more explanatory variables, but I omit them here for the sake of simplicity):

> head(sample)
        choice  cl_vint_com     gezinsid         pr_tot
1        0           1          411060112       2176.015
2       0           2           411060112       2240.531
3       0           3           411060112       3649.945
4       0           4           411060112       3255.782
5       0           5           411060112       5391.076
6       0           6           411060112       3740.085

"choice" is 1 if the alternative is chosen and 0 otherwise
 "cl_vint_com  " is the ID of the alternative
"gezinsid  " is the ID of the individuals
"pr_tot" is the price of each alternative.

I use the following steps for the estimation:

two_carmodel_data <- mlogit.data(sample, choice = "choice", shape = "long", alt.var = "cl_vint_com", chid.var = "gezinsid" )
formula_2cars <- mFormula(choice  ~ pr_tot  )
mod_res <- mlogit(formula_2cars, two_carmodel_data)

This leads to the following error messages:

      Error in solve.default(H, g[!fixed]) :  system is computationally singular: reciprocal condition number = 5.17802e-25

>From the documentation of the mlogit package, I do not see any mistake in my formulation of mFormula()   (pr_tot is an alternative specific variable).

I have found some internet discussions of users facing a similar problem, and I understand that in some cases, this may be due to some alternatives that are never chosen in the sample (leading to separation problems).

However, I have eliminated all alternatives that are never chosen, and the problem persists. The output of the following table confirms that no quasi-separation occurs):

table(sample $pr_tot , sample $choice)

I have probably made a very trivial mistake leading to collinerarity, but I do not see where (after all, mlogit takes care of setting the alternative-specific constant for the 1st alternative to zero, doesn't it?)

Please advice.

Laurent Franckx, PhD
Senior researcher sustainable mobility
VITO NV | Boeretang 200 | 2400 Mol
Tel. ++ 32 14 33 58 22| mob. +32 479 25 59 07 | Skype: laurent.franckx | laurent.franckx at vito.be | Twitter @LaurentFranckx

#verify whether all cl_vint are chosen to avoid strict separation
test_for_separ <- table(input_for_NLOGIT_all_alt_joined$cl_vint_com ,input_for_NLOGIT_all_alt_joined$choice)
test_for_separ_sel <- test_for_separ[test_for_separ$1 == 0, ]

VITO Disclaimer: http://www.vito.be/e-maildisclaimer

More information about the R-help mailing list