Implements Raise Regression as an inference-preserving alternative to
Ridge Regression for combating multicollinearity in linear models, including
the classical single-variable Raise Regression, the Simultaneous Raise
Regression (SRR) based on QR decomposition and the Sequential Variance
Inflation Factor (SVIF) of Jacob and Varadharajan (2022)
Ordinary and Robust Raise, Ridge, and Liu Regression, with Condition Number and Variance Inflation Factor diagnostics, for R.
raiseR implements the Raise Regression: an alternative to Ridge Regression
for combating multicollinearity that, unlike Ridge, leaves ordinary
least-squares inference intact. By construction, a raised design matrix
reproduces the OLS fitted values, residual standard error, R-squared and
F-statistic exactly -- raising only reallocates the fitted signal among
collinear predictors, stabilising their individual coefficients and standard
errors, without ever changing what the model actually explains.
The package also provides robust counterparts of every method for data contaminated by outliers, a Robust Variance Inflation Factor and robust Condition Number that resist being fooled by outliers the way their classical versions can be, and ordinary and robust Ridge and Liu regression.
# install.packages("remotes")
remotes::install_github("jinsejacob/raiseR")
raiseR depends on mrfDepth (for the projection outlyingness measure that
powers all of the robust methods) and MASS (for the MM-estimator used by
robRidge(type = "MM") and robLiu(type = "MM")). Both install
automatically from CRAN.
Ridge Regression shrinks coefficients by adding a penalty to the normal
equations, but this breaks the usual t- and F-testing machinery: exact,
finite-sample inference for a ridge estimate is not generally available.
Raise Regression instead re-expresses a collinear predictor as a linear
combination of itself and the part of it left unexplained by the other
predictors, which:
t-test machinery exactly valid for the raised
coefficients.library(raiseR)
set.seed(1)
n <- 200
x1 <- rnorm(n)
x2 <- 0.97 * x1 + rnorm(n, sd = 0.05) # strongly collinear with x1
x3 <- rnorm(n)
y <- 3 + 2 * x1 + 1.5 * x2 - x3 + rnorm(n)
dat <- data.frame(y, x1, x2, x3)
vif(y ~ x1 + x2 + x3, data = dat) # ordinary VIF (type = "O")
fit <- raiseReg(y ~ x1 + x2 + x3, data = dat) # sequential (default)
summary(fit)
R-squared, sigma and the F-statistic of the raised fit are numerically
identical to lm(y ~ x1 + x2 + x3, data = dat); only the coefficient split
between the two collinear predictors, and the precision with which each is
estimated, changes. method = "simultaneous" fits the QR/SVIF-based
simultaneous raise strategy instead of the one-variable-at-a-time default.
A handful of outliers can mask real collinearity from the classical VIF and distort an ordinary raise fit. The robust methods downweight observations by Tukey's biweight function applied to their Stahel-Donoho projection outlyingness before doing anything else:
dat_out <- dat
dat_out$y[1:6] <- dat_out$y[1:6] + rnorm(6, 15, 3) # y-outliers
dat_out$x1[7:10] <- dat_out$x1[7:10] + 8 # X-outliers
vif(y ~ x1 + x2 + x3, data = dat_out) # may be fooled
vif(y ~ x1 + x2 + x3, data = dat_out, type = "R", seed = 1) # robust: not fooled
fit_r <- robRaise(y ~ x1 + x2 + x3, data = dat_out, seed = 1)
summary(fit_r)
ridgeReg(mpg ~ ., data = mtcars) # ordinary ridge, auto k
robRidge(mpg ~ ., data = mtcars, type = "MM") # robust ridge (MM)
robRidge(mpg ~ ., data = mtcars, type = "SDO", seed = 1) # robust ridge (SDO)
liuReg(mpg ~ ., data = mtcars) # ordinary Liu, d = dopt
robLiu(mpg ~ ., data = mtcars, type = "MM") # robust Liu (MM)
cn(mpg ~ disp + hp + wt, data = mtcars) # Condition Number + indices
cn(mpg ~ disp + hp + wt, data = mtcars, type = "R") # robust version
scaleDat(mtcars, type = "median") # median/MADN scaling
scaleDat(mtcars, type = "range") # min-max to [0, 1]
Every fitted object supports print(), summary(), coef(), fitted(),
residuals(), predict(newdata = ) and plot(). For raiseReg() -- the
exact, unbiased fit -- the standard influence diagnostics hatvalues(),
cooks.distance(), dfbetas() and covRatio(), plus lmtest::bptest()
and car::ncvTest(), are also available and return values numerically
identical to an equivalent lm() fit.
For raiseReg(), the residual standard error, R-squared, F-statistic and
the standard errors underlying the coefficient table are computed from the
raised design and are therefore numerically identical to their OLS
counterparts -- this is the entire point of the raise regression. fitted(),
residuals() and predict(), which must apply to new data, apply the raise
coefficients to the original, unraised predictors instead, and so differ
very slightly from the training fit implied by the reported R-squared.
Jacob, J. and Varadharajan, R. (2023). Raise Estimation: An Alternative Approach in the Presence of Problematic Multicollinearity. Mathematics and Statistics, 11(1), 51-64. https://doi.org/10.13189/ms.2023.110106
Jacob, J. and Varadharajan, R. (2022). Simultaneous raise regression: a novel approach to combating collinearity in linear regression models. Quality & Quantity, 57, 4365-4386. https://doi.org/10.1007/s11135-022-01557-9
Jacob, J. and Varadharajan, R. (2024). Robust Variance Inflation Factor: A Promising Approach for Collinearity Diagnostics in the Presence of Outliers. Sankhya B, 86(2), 845-871. https://doi.org/10.1007/s13571-024-00342-y
Jacob, J. (2025). Enhancing Linear Regression with Raise Techniques to Effectively Tackle the Multicollinearity Problem. PhD thesis, SRM Institute of Science and Technology, Kattankulathur, India.
Hoerl, A. E. and Kennard, R. W. (1970). Ridge regression: Biased estimation for nonorthogonal problems. Technometrics, 12(1), 55-67. https://doi.org/10.1080/00401706.1970.10488634
Liu, K. (1993). A new class of biased estimate in linear regression. Communications in Statistics - Theory and Methods, 22(2), 393-402. https://doi.org/10.1080/03610929308831027
Yohai, V. J. (1987). High breakdown-point and high efficiency robust estimates for regression. The Annals of Statistics, 15(2), 642-656. https://doi.org/10.1214/aos/1176350366
Filzmoser, P. and Kurnaz, F. S. (2018). A robust Liu regression estimator. Communications in Statistics - Simulation and Computation, 47(2), 432-443. https://doi.org/10.1080/03610918.2016.1271889
Kan, B., Alpu, O. and Yazici, B. (2013). Robust ridge and robust Liu estimator for regression based on the LTS estimator. Journal of Applied Statistics, 40(3), 644-655. https://doi.org/10.1080/02664763.2012.750285
GPL (>= 3)