mixqr is an extensible framework for finite mixtures of quantile (and
expectile) regressions in R. At its heart it finds hidden subgroups in your data
and fits a separate quantile regression in each one: when a single regression
line hides two (or more) distinct relationships (a high-return group and a
low-return group, a fast-growing segment and a stagnant one), mixqr recovers
the groups and their group-specific effects at once, without you having to
label the groups in advance. Because it models a quantile rather than the
mean, it is robust to skew and outliers and can describe effects in the tails as
well as at the center.
Built on a single expectation–maximization (EM) substrate with a documented engine/extension contract, the package grows that core into a family of capabilities — expectile and M-quantile component families, component-specific penalized selection, and joint multi-quantile estimation with non-crossing — and the companion package mixqrgate adds location-varying gating.
The package fills a real gap in the R ecosystem. The only previous CRAN package
for this model (qrmix) was archived in 2026 and used a heuristic, not the
likelihood-and-EM estimator; ClusPred solves a different (covariate-driven
latent-class) problem; flexmix and mixtools have no quantile / check-loss
driver; and brms's mixture(asym_laplace) cannot give the constrained,
location-anchored components or the calibrated standard errors that inference
requires. mixqr provides a clean, quantile-first interface, the first
maintained implementation of the Wu & Yao (2016) kernel-density EM, and
standard errors validated by simulation to reach near-nominal coverage.
📖 Full documentation and tutorial: https://kvenkita.github.io/mixqr/
# install.packages("remotes")
# remotes::install_github("kvenkita/mixqr")
install.packages("mixqr", repos = c('https://kvenkita.r-universe.dev', 'https://cloud.r-project.org'))
mixqr is pure R — no compiler or Stan toolchain required.
library(mixqr)
# Two combustion regimes in the engine (ethanol) data
fit <- mixqr(equivalence ~ nox, data = engine, tau = 0.5, m = 2,
variance = "stochEM")
summary(fit) # component coefficients with calibrated standard errors
plot(fit) # data + component lines, and the error densities
predict(fit, type = "class") # which regime each observation belongs to
# Choose the number of components
mixqr_select(equivalence ~ nox, data = engine, tau = 0.5, m = 1:4,
criterion = "cv")
AIC/BIC (the default), and the
semiparametric kernel-density EM of Wu & Yao (2016) with nonparametric
component error densities (robust to multimodal / asymmetric errors).summary(), coef(),
confint(), vcov(), predict(), plot(), AIC()/BIC() methods.family =). Smooth, crossing-free
component losses (Newey & Powell 1987; Breckling & Chambers 1988) beside the
quantile check loss.mixqr_pen()). SCAD / adaptive-LASSO
selection in which each latent regime gets its own sparse support.mixqr_nc()). Joint estimation across a
grid of quantiles with one shared classification and order-respecting curves.register_mixqr_engine()) hosts
all of the above, and the companion mixqrgate adds location-varying gating.| Function | Purpose |
|---|---|
mixqr() |
Fit a finite mixture of quantile regressions |
mixqr_control(), mixqr_vcontrol()
|
EM and variance-estimation settings |
mixqr_select() |
Choose the number of components (AIC / BIC / CV) |
mixqr(family = ) |
Quantile, expectile or M-quantile component losses |
mixqr_pen(), selectedVars()
|
Component-specific penalized variable selection |
mixqr_nc() |
Joint multi-quantile fit: shared classification + non-crossing |
summary(), coef(), confint()
|
Component estimates, SEs and intervals |
predict() |
Component quantiles, classification, posteriors |
plot() |
Data + component lines and error densities |
sim_mixqr2(), sim_mixqr3()
|
Reproducible Wu & Yao simulation designs |
If you use mixqr, please cite it:
Venkitasubramanian, K. (2026). mixqr: Extensible Finite Mixtures of Quantile and Expectile Regressions. R package version 0.2.0. https://github.com/kvenkita/mixqr
citation("mixqr")
Please also cite the underlying methodology — Wu & Yao (2016) for the mixture-of-quantile-regressions estimator, and Koenker & Bassett (1978) for quantile regression.
Created and maintained by Kailas Venkitasubramanian, University of North Carolina at Charlotte. Released under the MIT License.