Location-varying gating for mixtures of quantile regressions
mixqrgate extends mixqr so that the mixing probabilities of a finite mixture of quantile regressions can depend on covariates — and on the quantile level. The mixing weights follow a multinomial-logit gate; with a quantile-indexed gate, latent-class membership can change across the conditional distribution. An observation may belong to one regime near the median and another in the tail.
This is the location-varying mixing of Furno (2025), turned from a Stata reweighting heuristic into a likelihood/EM object — with standard errors on the gate, which the original method does not provide.
Installation
# install.packages("remotes")
remotes::install_github("kvenkita/mixqr") # required
remotes::install_github("kvenkita/mixqrgate")Quick start
library(mixqrgate)
d <- sim_gate2(n = 600, gamma = c(0, 1.5)) # gate depends on z
# concomitant gate at the median
fit <- mixqrgate(y ~ x, data = d, gating = ~ z, G = 2, tau = 0.5)
summary(fit) # component coefficients + gate coefficients WITH SEs
# location-varying gate: refit the gate at each quantile
fitv <- mixqrgate(y ~ x, data = d, gating = ~ z, G = 2,
tau = c(0.1, 0.5, 0.9), vary_gating = "discrete")
plot(fitv, which = "gating") # gate-vs-tau pictureKey features
-
Concomitant gate.
gating = ~ z1 + z2puts a multinomial logit on the mixing probabilities; the gating covariates may differ from the component-regression covariates. -
Quantile-indexed gate. A vector
tauwithvary_gating = "discrete"refits the gate at each quantile, so membership can vary across the distribution (Furno’s location-varying mixing). -
Inference on the gate. Sandwich standard errors, z- and p-values per quantile — answer whether and how membership changes with the covariates and with
tau. -
Reduces to mixqr.
gating = ~1gives a constant gate and the ordinary mixture-of-quantile-regressions fit. -
Two engines. Parametric asymmetric-Laplace (
method = "ald") or the Wu & Yao nonparametric kernel-density path (method = "kde").
Relationship to mixqr
mixqrgate reuses mixqr’s component and constrained-error-density machinery through its extension API (weighted_rq(), constrained_kde()); only the gate is new. The component estimates, diagnostics, and quantile semantics are those of mixqr.