Skip to content

logitr

Logit Models w/Preference & WTP Space Utility Parameterizations

v1.1.3 · Nov 17, 2025 · MIT + file LICENSE

Description

Fast estimation of multinomial (MNL) and mixed logit (MXL) models in R. Models can be estimated using "Preference" space or "Willingness-to-pay" (WTP) space utility parameterizations. Weighted models can also be estimated. An option is available to run a parallelized multistart optimization loop with random starting points in each iteration, which is useful for non-convex problems like MXL models or models with WTP space utility parameterizations. The main optimization loop uses the 'nloptr' package to minimize the negative log-likelihood function. Additional functions are available for computing and comparing WTP from both preference space and WTP space models and for predicting expected choices and choice probabilities for sets of alternatives based on an estimated model. Mixed logit models can include uncorrelated or correlated heterogeneity covariances and are estimated using maximum simulated likelihood based on the algorithms in Train (2009) <doi:10.1017/CBO9780511805271>. More details can be found in Helveston (2023) <doi:10.18637/jss.v105.i10>.

Downloads

4.9K

Last 30 days

1766th

16.3K

Last 90 days

71.6K

Last year

Trend: -9.4% (30d vs prior 30d)

CRAN Check Status

1 ERROR
13 OK
Show all 14 flavors
Flavor Status
r-devel-linux-x86_64-debian-clang OK
r-devel-linux-x86_64-debian-gcc OK
r-devel-linux-x86_64-fedora-clang OK
r-devel-linux-x86_64-fedora-gcc OK
r-devel-macos-arm64 OK
r-devel-windows-x86_64 OK
r-oldrel-macos-arm64 OK
r-oldrel-macos-x86_64 OK
r-oldrel-windows-x86_64 OK
r-patched-linux-x86_64 OK
r-release-linux-x86_64 OK
r-release-macos-arm64 ERROR
r-release-macos-x86_64 OK
r-release-windows-x86_64 OK
Check details (2 non-OK)
ERROR r-release-macos-arm64

examples

Running examples in ‘logitr-Ex.R’ failed
The error most likely occurred in:

> ### Name: logitr
> ### Title: The main function for estimating logit models
> ### Aliases: logitr
> ### Keywords: logit logitr mixed mnl mxl willingness-to-pay wtp
> 
> ### ** Examples
> 
> # For more detailed examples, visit
> # https://jhelvy.github.io/logitr/articles/
> 
> library(logitr)
> 
> # Estimate a MNL model in the Preference space
> mnl_pref <- logitr(
+   data    = yogurt,
+   outcome = "choice",
+   obsID   = "obsID",
+   pars    = c("price", "feat", "brand")
+ )
Running model...
Done!
> 
> # Estimate a MNL model in the WTP space, using a 5-run multistart
> mnl_wtp <- logitr(
+   data           = yogurt,
+   outcome        = "choice",
+   obsID          = "obsID",
+   pars           = c("feat", "brand"),
+   scalePar       = "price",
+   numMultiStarts = 5
+ )
Running multistart...
  Random starting point iterations: 5
  Number of cores: 15

 *** caught segfault ***
address 0x110, cause 'invali
...[truncated]...
t = TRUE)
16: sendMaster(try(lapply(X = S, FUN = FUN, ...), silent = TRUE))
17: FUN(X[[i]], ...)
18: lapply(seq_len(cores), inner.do)
19: parallel::mclapply(miList, runModel, mc.cores = numCores)
20: withCallingHandlers(expr, warning = function(w) if (inherits(w,     classes)) tryInvokeRestart("muffleWarning"))
21: suppressWarnings(parallel::mclapply(miList, runModel, mc.cores = numCores))
22: withCallingHandlers(expr, message = function(c) if (inherits(c,     classes)) tryInvokeRestart("muffleMessage"))
23: suppressMessages(suppressWarnings(parallel::mclapply(miList,     runModel, mc.cores = numCores)))
24: runMultistart(modelInputs)
25: logitr(data = yogurt, outcome = "choice", obsID = "obsID", pars = c("feat",     "brand"), scalePar = "price", numMultiStarts = 5)
An irrecoverable exception occurred. R is aborting now ...
Error in names(x) <- value : 
  'names' attribute [3] must be the same length as the vector [0]
Calls: logitr -> getMultistartSummary -> colnames<-
Execution halted
ERROR r-release-macos-arm64

re-building of vignette outputs

Error(s) in re-building vignettes:
--- re-building ‘basic_usage.Rmd’ using rmarkdown

 *** caught segfault ***
address 0x110, cause 'invalid permissions'

Traceback:
 1: mi$logitFuncs$getMnlV(pars, d$X, d$scalePar)
 2: eval_f(x0, ...)
 3: nloptr::nloptr(x0 = mi$model$startVals, eval_f = mi$evalFuncs$objective,     mi = mi, opts = mi$options)
 4: doTryCatch(return(expr), name, parentenv, handler)
 5: tryCatchOne(expr, names, parentenv, handlers[[1L]])
 6: tryCatchList(expr, classes, parentenv, handlers)
 7: tryCatch({    result <- nloptr::nloptr(x0 = mi$model$startVals, eval_f = mi$evalFuncs$objective,         mi = mi, opts = mi$options)}, error = function(e) {})
 8: system.time({    model <- mi$model    result <- NULL    tryCatch({        result <- nloptr::nloptr(x0 = mi$model$startVals, eval_f = mi$evalFuncs$objective,             mi = mi, opts = mi$options)    }, error = function(e) {    })    if (!is.null(result)) {        model$fail <- FALSE        model$coefficients <- result$solu
...[truncated]...
ict.Rmd:91-109 [unnamed-chunk-5]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<error/rlang_error>
Error in `names(x) <- value`:
! 'names' attribute [3] must be the same length as the vector [0]
---
Backtrace:
    ▆
 1. └─logitr::logitr(...)
 2.   └─logitr:::getMultistartSummary(allModels)
 3.     └─base::`colnames<-`(...)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Error: processing vignette 'predict.Rmd' failed with diagnostics:
'names' attribute [3] must be the same length as the vector [0]
--- failed re-building ‘predict.Rmd’

--- re-building ‘summarizing_results.Rmd’ using rmarkdown
--- finished re-building ‘summarizing_results.Rmd’

--- re-building ‘utility_models.Rmd’ using rmarkdown
--- finished re-building ‘utility_models.Rmd’

SUMMARY: processing the following files failed:
  ‘basic_usage.Rmd’ ‘mnl_models.Rmd’ ‘mnl_models_weighted.Rmd’
  ‘predict.Rmd’

Error: Vignette re-building failed.
Execution halted

Check History

ERROR 12 OK · 0 NOTE · 0 WARNING · 2 ERROR · 0 FAILURE Mar 10, 2026
ERROR r-devel-macos-arm64

examples

Running examples in ‘logitr-Ex.R’ failed
The error most likely occurred in:

> ### Name: logitr
> ### Title: The main function for estimating logit models
> ### Aliases: logitr
> ### Keywords: logit logitr mixed mnl mxl willingness-to-pay wtp
> 
> ##
...[truncated]...
rice", numMultiStarts = 5)
An irrecoverable exception occurred. R is aborting now ...
Error in names(x) <- value : 
  'names' attribute [3] must be the same length as the vector [0]
Calls: logitr -> getMultistartSummary -> colnames<-
Execution halted
ERROR r-release-macos-arm64

examples

Running examples in ‘logitr-Ex.R’ failed
The error most likely occurred in:

> ### Name: logitr
> ### Title: The main function for estimating logit models
> ### Aliases: logitr
> ### Keywords: logit logitr mixed mnl mxl willingness-to-pay wtp
> 
> ##
...[truncated]...
rice", numMultiStarts = 5)
An irrecoverable exception occurred. R is aborting now ...
Error in names(x) <- value : 
  'names' attribute [3] must be the same length as the vector [0]
Calls: logitr -> getMultistartSummary -> colnames<-
Execution halted

Reverse Dependencies (5)

imports

Dependency Network

Dependencies Reverse dependencies generics MASS nloptr randtoolbox tibble cbcTools broom.helpers ggeffects insight parameters logitr

Version History

new 1.1.3 Mar 10, 2026
updated 1.1.3 ← 1.1.2 diff Nov 17, 2025
updated 1.1.2 ← 1.1.1 diff Jul 23, 2024
updated 1.1.1 ← 1.1.0 diff Sep 28, 2023
updated 1.1.0 ← 1.0.1 diff May 17, 2023
updated 1.0.1 ← 1.0.0 diff Feb 18, 2023
updated 1.0.0 ← 0.8.0 diff Feb 6, 2023
updated 0.8.0 ← 0.7.0 diff Oct 2, 2022
updated 0.7.0 ← 0.6.1 diff Jun 16, 2022
updated 0.6.1 ← 0.6.0 diff Jun 11, 2022
updated 0.6.0 ← 0.5.0 diff Jun 10, 2022
updated 0.5.0 ← 0.4.0 diff Jan 3, 2022
updated 0.4.0 ← 0.3.0 diff Oct 24, 2021
updated 0.3.0 ← 0.2.0 diff Aug 12, 2021
updated 0.2.0 ← 0.1.0 diff Jun 13, 2021
new 0.1.0 Jan 18, 2021