New lwpls_local() returns the local models that LW-PLS builds for new
samples, with their diagnostics: the reliability of each prediction
(effective number of neighbors, distance to the nearest training sample,
and the Hotelling T² and Q statistics of the query in its local model,
compared with empirical limits, theoretical limits and as percentile ranks
among the training samples of the local model), the regression
coefficients and VIP of each local model,
the predictors selected by sparse models, and the robust weights of the
training samples. It accepts lwpls_fit() objects, parsnip fits and
workflows.
New ggplot2 plots of the local models, also available with autoplot():
plot_reliability() (applicability domain of the predictions),
plot_coefficients() (local regression vectors or VIP along the spectrum,
as lines or a heatmap), plot_robust_weights() (training samples down-weighted
by robust models, such as wrong reference values) and plot_selection()
(wavelengths selected by sparse models, per component or overall). The
spectral axis is read from the predictor names or given as wavelength.
New vignette, vignette("diagnostics").
The README and vignette("lwpls") show the cross-validated RMSE as a 3D
surface over num_comp and localization (interactive on the package
website, with plotly as a new suggested package).
New vignette, vignette("similarity"), on choosing a similarity index: the
geometry of the Euclidean and covariance-based distances, and simulations
showing when each one works best.
Robust LW-PLS: with robust = TRUE (an engine argument of lwpls() and an
argument of lwpls_fit()), each local model is fitted by partial robust
M-regression (PRM; Serneels et al., 2005), with the Fair (default) or
Hampel weight function. The medians and the L1-median that PRM uses are
weighted by the similarity weights, so the robust models stay local. Robust
models are available for regression with one or more outcomes and for
classification, and they standardize the data and scale the distances with
the median and the MAD.
Sparse LW-PLS: the new sparsity argument (a tunable main argument of
lwpls(), with the dials parameter sparsity()) fits the local models by
sparse NIPALS (SNIPLS; Hoffmann et al., 2015), so that each local model
selects its own predictors. Combined with robust = TRUE, it gives local
sparse PRM (SPRM).
New yardstick metric trimmed_rmse() to tune robust models on data with
outliers.
New vignette, vignette("robust-sparse").
This is a rewrite of the package. LW-PLS is now implemented natively and no longer depends on the archived rnirs package.
lwpls() now has the arguments mode, num_comp, localization,
neighbors, similarity and engine. The shapefactor argument is replaced by
localization, the parameter of the similarity function of Kim et al. (2011)
(lambda in Kaneko's implementation). The engine is now "lwpls" (was
"rnirs").
The magrittr pipe %>% and generics::tidy() are no longer re-exported. Use
the native pipe |> (R >= 4.1.0).
Native implementation of LW-PLS, validated against Kaneko's reference implementation. The prediction kernel is written in C++ (RcppArmadillo): it uses the kernel PLS algorithm of Dayal & MacGregor (1997) and processes queries in blocks so that most of the work runs as BLAS matrix-matrix products.
Regression with one or more numeric outcomes, and classification (LW-PLS-DA) with class and probability predictions.
New lwpls_fit(), a hardhat-based fitting function with matrix, data frame,
formula and recipe interfaces. Its predict() method returns tibbles that
follow the tidymodels conventions and can use any number of components.
multi_predict() and min_grid() methods: tune evaluates all values of
num_comp from a single model fit.
New dials tuning parameter localization().
Covariance-based LW-PLS (CbLW-PLS, Hazama and Kano, 2015): the new
similarity argument measures the similarity between samples with the
Euclidean distance ("euclidean", the default) or along the covariance
direction of the training data ("covariance"). It can be tuned with the
new dials parameter similarity().
The optional neighbors argument restricts each local model to the nearest
training samples.
The "lwpls" engine has a scale argument to switch off the
standardization of the data.
Added unit tests (with test coverage tracked on Codecov) and an introductory
vignette (vignette("lwpls")), including regression and classification
examples.
NEWS.md file to track changes to the package.