[R] Estimating regression with constraints in model coefficients
Gregg Powell
g@@@powe|| @end|ng |rom protonm@||@com
Tue Apr 8 21:03:03 CEST 2025
there are ways to implement constraints on parameter estimates in ordinal logistic regression in R. Here are a few approaches:
The rms package (Regression Modeling Strategies) by Frank Harrell offers the lrm function which can handle constraints through its penalty parameter, though it's primarily designed for regularization.
For more flexible constraints, you can use the constrOptim or optim functions from base R along with a custom likelihood function for ordinal logistic regression.
The VGAM package provides the vglm function with family cumulative that can handle certain types of constraints.
For Bayesian approaches, you can use brms or rstan to impose informative priors that effectively constrain parameters.
Here's a simple example using the VGAM package:
> library(VGAM)
> library(foreign)
>
> # Load data
> dat <- foreign::read.dta("https://stats.idre.ucla.edu/stat/data/ologit.dta")
>
> # Unconstrained model (for comparison)
> model_unconstrained <- vglm(apply ~ pared + public + gpa,
> family = cumulative(parallel = TRUE),
> data = dat)
> summary(model_unconstrained)
>
> # Constrained model (example: constraining pared coefficient to be positive)
> # This uses the "constraint" matrix approach
> constraint <- rbind(
> c(0, 1, 0, 0), # This row corresponds to pared coefficient
> c(0, 0, 0, 0), # These rows do nothing (identity constraints for other parameters)
> c(0, 0, 0, 0)
> )
> model_constrained <- vglm(apply ~ pared + public + gpa,
> family = cumulative(parallel = TRUE),
> constraints = constraint,
> data = dat)
> summary(model_constrained)
For more complex constraints, you might need to work with optimization functions directly.
r/
Gregg
On Tuesday, April 8th, 2025 at 11:20 AM, Christofer Bogaso <bogaso.christofer using gmail.com> wrote:
>
>
> Hi,
>
> I have below fit with ordinal logistic regression
>
> dat = foreign::read.dta("https://stats.idre.ucla.edu/stat/data/ologit.dta")
>
> summary(MASS::polr(formula = apply ~ pared + public + gpa, data = dat))
>
> However, instead of obtaining unconstrained estimates of model
> parameters, I would like to impose certain constraints on each of the
> model parameters, based on some non-sample information.
>
> Is there any R function to estimate model coefficients with imposing
> some unser-defined constraints on the model parameters?
>
> Any pointer will be very helpful.
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide https://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 603 bytes
Desc: OpenPGP digital signature
URL: <https://stat.ethz.ch/pipermail/r-help/attachments/20250408/9883f787/attachment.sig>
More information about the R-help
mailing list