| Title: | Least Squares Sparse Principal Components Analysis |
|---|---|
| Description: | Implements least-squares sparse principal component analysis with cardinality constraints. The package has an efficient C++ backend and provides functions for fitting, summarizing, comparing, and visualizing sparse principal component models. The approach follows Merola (2015) <doi:10.1111/anzs.12128> and Merola and Chen (2019) <doi:10.1016/j.jmva.2019.04.001>. |
| Authors: | Giovanni Maria Merola [aut, cre] |
| Maintainer: | Giovanni Maria Merola <[email protected]> |
| License: | AGPL-3 |
| Version: | 1.1.5 |
| Built: | 2026-10-30 12:42:36 UTC |
| Source: | https://github.com/merolagio/spca |
The package provides functions to compute LS-SPCA solutions, in which sparsity is imposed on Pearson PCA's least-squares reconstruction objective.
LS-SPCA differs from SPCA methods that compute sparse PCs by maximizing variance. Details are provided in the references below and in the extended vignette.
This release accompanies the related article and supports reproduction of the results reported therein.
Computation relies on efficient C++ routines and includes multiple options for variable selection and sparse weight estimation.
Fitting functions
spca() Computes LS-SPCA solutions from a data or covariance/correlation
matrix. It returns a spca_object of class spca.
pca() Computes PCA solutions from a data or covariance/correlation
matrix. It returns a spca_object inheriting from classes spca_pca
and spca.
Methods
print(), summary(), and plot() inspect and display spca objects.
change_sign() changes the signs of selected components and their related
object elements.
show_weights() prints or returns the nonzero weights or contributions for
selected components.
aggregate_by_group() aggregates weights or contributions according to a
grouping vector.
scree_plot() and mp_qqplot() provide diagnostic plots for objects
returned by pca().
Utilities
is.spca() Verifies whether an object is a proper spca object.
is.pca() Verifies whether an object is a proper pca object.
compare_spca() Compares two or more LS-SPCA solutions numerically
and visually.
new_spca() Creates an spca object from a set of weights.
The former interfaces change_weights_sign_spca(),
change_loadings_sign_spca(), spca_screeplot(), and wachter_qqplot() are
retained for backward compatibility and issue deprecation warnings. Objects
created by previous package versions with loadings and loadings_list
elements remain supported.
Maintainer: Giovanni Maria Merola [email protected]
Merola, G. M. (2015). Least Squares Sparse Principal Component Analysis: a Backward Elimination approach to attain large weights. Australia & New Zealand Journal of Statistics, 57, 391–429. doi:10.1111/anzs.12128
Merola, G. M. and Chen, G. (2019). Projection sparse principal component analysis: An efficient least squares method. Journal of Multivariate Analysis, 173, 366–382. doi:10.1016/j.jmva.2019.04.001
Useful links:
pca or spca Object by GroupAggregate component weights or contributions according to a grouping variable.
aggregate_by_group( object, variable_groups, cols = NULL, only_nonzero = TRUE, contributions = TRUE, digits = ifelse(contributions, 1, 3), print_table = TRUE, return_table = FALSE, spca_obj = NULL ) ## S3 method for class 'spca' aggregate_by_group( object, variable_groups, cols = NULL, only_nonzero = TRUE, contributions = TRUE, digits = ifelse(contributions, 1, 3), print_table = TRUE, return_table = FALSE, spca_obj = NULL ) ## S3 method for class 'pca' aggregate_by_group(object, ...)aggregate_by_group( object, variable_groups, cols = NULL, only_nonzero = TRUE, contributions = TRUE, digits = ifelse(contributions, 1, 3), print_table = TRUE, return_table = FALSE, spca_obj = NULL ) ## S3 method for class 'spca' aggregate_by_group( object, variable_groups, cols = NULL, only_nonzero = TRUE, contributions = TRUE, digits = ifelse(contributions, 1, 3), print_table = TRUE, return_table = FALSE, spca_obj = NULL ) ## S3 method for class 'pca' aggregate_by_group(object, ...)
object |
An object of class |
variable_groups |
A vector or factor with one group label per variable. |
cols |
An integer vector selecting components. If a single positive
integer is supplied, components |
only_nonzero |
A logical value indicating whether to omit variable_groups whose values are zero in every selected component. |
contributions |
A logical value. If |
digits |
Number of digits used in printed output. |
print_table |
A logical value indicating whether to print the table. |
return_table |
A logical value indicating whether to return the table visibly. |
spca_obj |
Deprecated alias for |
... |
Additional arguments passed to |
aggregate_by_group(pca): Aggregate a pca object by group.
Other spca:
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
Other pca:
change_sign(),
is.pca(),
mp_qqplot(),
pca(),
print.pca(),
scree_plot(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
pca or spca ObjectChange the signs of selected Weights in a fitted object.
change_sign(object, index_to_change, spca_obj = NULL) ## S3 method for class 'spca' change_sign(object, index_to_change, spca_obj = NULL) ## S3 method for class 'pca' change_sign(object, ...)change_sign(object, index_to_change, spca_obj = NULL) ## S3 method for class 'spca' change_sign(object, index_to_change, spca_obj = NULL) ## S3 method for class 'pca' change_sign(object, ...)
object |
An object of class |
index_to_change |
An integer vector of component indices whose signs should be changed. |
spca_obj |
Deprecated alias for |
... |
Additional arguments passed to |
The modified object, preserving its classes.
change_sign(pca): Change component signs in a pca object.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
Other pca:
aggregate_by_group(),
is.pca(),
mp_qqplot(),
pca(),
print.pca(),
scree_plot(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_cspca = spca(holzinger, n_comps = 4) show_correlations(ho_cspca) # In applications we would change only the fourth set of weights ho_changed = change_sign(ho_cspca, index_to_change = c(2, 4)) is.spca(ho_changed) show_weights(ho_cspca, cols = 2) show_weights(ho_changed, cols = 2) show_correlations(ho_changed)data(holzinger) ho_cspca = spca(holzinger, n_comps = 4) show_correlations(ho_cspca) # In applications we would change only the fourth set of weights ho_changed = change_sign(ho_cspca, index_to_change = c(2, 4)) is.spca(ho_changed) show_weights(ho_cspca, cols = 2) show_weights(ho_changed, cols = 2) show_correlations(ho_changed)
spca SolutionsPlots weights and print summary statistics for two or more spca
objects side by side. For the meaning of each summary statistic, see
summary.spca. Tables and plots can optionally be returned.
compare_spca( obj_list, n_comps = NULL, contributions = TRUE, only_nonzero = TRUE, variable_groups = NULL, plot_weights = TRUE, plot_type = c("bars", "points"), methods_names = NULL, x_axis_var_names = FALSE, col_grouplines = "black", color_scale = c("ggplot", "cbb", "printsafe", "bw"), col_short_names = TRUE, print_tables = TRUE, print_weights = FALSE, print_summary = TRUE, show_plot = TRUE, return_tables = FALSE, return_plot = FALSE )compare_spca( obj_list, n_comps = NULL, contributions = TRUE, only_nonzero = TRUE, variable_groups = NULL, plot_weights = TRUE, plot_type = c("bars", "points"), methods_names = NULL, x_axis_var_names = FALSE, col_grouplines = "black", color_scale = c("ggplot", "cbb", "printsafe", "bw"), col_short_names = TRUE, print_tables = TRUE, print_weights = FALSE, print_summary = TRUE, show_plot = TRUE, return_tables = FALSE, return_plot = FALSE )
obj_list |
A list of two or more |
n_comps |
An integer scalar or |
contributions |
A logical value (default |
only_nonzero |
A logical value (default |
variable_groups |
Optional variable grouping (default |
plot_weights |
A logical value (default |
plot_type |
A character vector (default first element |
methods_names |
An optional character vector (default |
x_axis_var_names |
A logical value (default |
col_grouplines |
A character scalar (default |
color_scale |
A character vector (default first element
|
col_short_names |
A logical value (default |
print_tables |
A logical value (default |
print_weights |
A logical value (default |
print_summary |
A logical value (default |
show_plot |
A logical value (default |
return_tables |
A logical value (default |
return_plot |
A logical value (default |
Invisibly returns NULL by default. If
return_tables = TRUE, returns a list containing the comparison
matrix and summary matrix. If return_plot = TRUE, the returned
object also includes the weights or contributions plot.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
data(holzinger) ho_uspca = spca(holzinger, n_comps = 4, method = "u") ho_cspca = spca(holzinger, n_comps = 4, method = "c") compare_spca(list(ho_uspca, ho_cspca))data(holzinger) ho_uspca = spca(holzinger, n_comps = 4, method = "u") ho_cspca = spca(holzinger, n_comps = 4, method = "c") compare_spca(list(ho_uspca, ho_cspca))
This dataset is based on the classic Holzinger and Swineford (1939) Student Ability dataset.
We use the version distributed with the psychTools package. For
comparability with previous analyses, we select 12 items and only students
from the Grant–White School (see also Ferrara, Martella, and Vichi, 2019).
holzingerholzinger
A numeric data frame with 145 rows and 12 variables. The variables are:
Visual perception test (SPL).
Cubes test (SPL).
Lozenges test (SPL).
Paragraph comprehension test (VBL).
Sentence completion test (VBL).
Word meaning test (VBL).
Addition test (SPD).
Counting groups of dots test (SPD).
Straight and curved capitals test (SPD).
Deduction test (MTH).
Numerical puzzles test (MTH).
Series completion test (MTH).
The 12 items correspond to four ability scales:
spatial (SPL), verbal (VBL), speed (SPD), and mathematical (MTH).
The data provided with this package are scaled to mean zero and unit
variance. The scales are available as a factor called holzinger_scales
Holzinger, K. J., and Swineford, F. (1939). A study in factor analysis: The stability of a bi-factor solution. Supplementary Educational Monographs, No. 48.
Ferrara, C., Martella, F., and Vichi, M. (2019). Probabilistic disjoint principal component analysis. Multivariate Behavioral Research, 54(1), 47–61.
Holzinger–Swineford Student Ability Scales
holzinger_scalesholzinger_scales
A factor listing the 4 scales: SPL, VBL, SPD and MTH, for each variable.
Check whether an object has class pca and contains the core
elements produced by pca().
is.pca(x)is.pca(x)
x |
An object to test. |
Performs a lightweight check of the class and the presence of core elements. It does not validate their values or dimensions. Scores and the number of observations are not required because they may be unavailable for covariance-matrix input.
A logical value: TRUE if the required class and core
elements are present, and FALSE otherwise.
Other pca:
aggregate_by_group(),
change_sign(),
mp_qqplot(),
pca(),
print.pca(),
scree_plot(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_pca = pca(holzinger, n_comps = 2, screeplot = FALSE, qq_plot = FALSE) is.pca(ho_pca)data(holzinger) ho_pca = pca(holzinger, n_comps = 2, screeplot = FALSE, qq_plot = FALSE) is.pca(ho_pca)
Check whether an object has class spca and contains the core elements
required by the package.
is.spca(x)is.spca(x)
x |
An object to test. |
The function checks for class spca and for the presence of
the core elements used by the package, including weights, contributions,
explained-variance summaries, component counts, cardinalities, weight lists,
and active indices. It performs a lightweight structural check; use
validate_spca() for a more detailed internal validation.
A logical value. Returns TRUE if x has class
spca and contains the required core elements, and FALSE
otherwise.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
data(holzinger) ho_cspca = spca(holzinger, n_comps = 2) is.spca(ho_cspca)data(holzinger) ho_cspca = spca(holzinger, n_comps = 2) is.spca(ho_cspca)
Produce a qq-plot comparing the eigenvalues of a fitted PCA with Marchenko–Pastur theoretical quantiles.
mp_qqplot( pca_fit, n_vars = NULL, n_obs = NULL, gamma = NULL, cor = TRUE, common_var = NULL, n_plot = NULL, n_fitline = NULL, addtitle = TRUE, show_plot = TRUE, return_plot = FALSE ) ## S3 method for class 'pca' mp_qqplot( pca_fit, n_vars = NULL, n_obs = NULL, gamma = NULL, cor = TRUE, common_var = NULL, n_plot = NULL, n_fitline = NULL, addtitle = TRUE, show_plot = TRUE, return_plot = FALSE )mp_qqplot( pca_fit, n_vars = NULL, n_obs = NULL, gamma = NULL, cor = TRUE, common_var = NULL, n_plot = NULL, n_fitline = NULL, addtitle = TRUE, show_plot = TRUE, return_plot = FALSE ) ## S3 method for class 'pca' mp_qqplot( pca_fit, n_vars = NULL, n_obs = NULL, gamma = NULL, cor = TRUE, common_var = NULL, n_plot = NULL, n_fitline = NULL, addtitle = TRUE, show_plot = TRUE, return_plot = FALSE )
pca_fit |
An object of class |
n_vars |
An integer scalar or |
n_obs |
An integer scalar or |
gamma |
A positive numeric scalar or |
cor |
A logical scalar (default |
common_var |
A positive numeric scalar or |
n_plot |
An integer scalar or |
n_fitline |
An integer scalar or |
addtitle |
A logical scalar (default |
show_plot |
A logical scalar (default |
return_plot |
A logical scalar (default |
This diagnostic relies on Marchenko–Pastur theory for the null
eigenvalue distribution of a (possibly high-dimensional) sample
covariance matrix, and is therefore only meaningful for objects of
class "pca" (i.e. objects returned by pca()). It does not apply
to sparse fits returned by spca() (class "spca"), for which the
reference distribution does not hold; no method is defined for that
class, so calling it on such an object raises the standard
"no applicable method" error rather than producing a plot.
The Marchenko–Pastur distribution depends on the ratio of variables to
observations. The gamma argument uses its reciprocal, n_obs / n_vars,
as required by RMTstat::qmp. Both counts must be available, even when
gamma is supplied. The covariance reference assumes independent
variables with a common population variance.
With cor = TRUE, the theoretical quantiles are scaled to sum to
n_vars. A warning is issued if the stored eigenvalues do not sum to
n_vars within a tolerance of 1e-8 * n_vars. This check assumes that
all nonzero eigenvalues are stored; it does not establish that the
original matrix is a correlation matrix.
With cor = FALSE, the quantiles retain the scale set by common_var.
A fitted line must use at least two of the plotted points.
If return_plot = TRUE, a ggplot object; otherwise NULL
invisibly.
Other pca:
aggregate_by_group(),
change_sign(),
is.pca(),
pca(),
print.pca(),
scree_plot(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_pca = pca(holzinger) # from the screeplot we may choose to retain 4 components # produce a Wachter qqplot fitting a line to all but the largest # 4 eigenvalues. # Since pca was fitted using the data matrix, the fit carries the number # of observations. Otherwise we would need to pass `n_obs` . mp_qqplot(ho_pca, n_fitline = -4) # The qq-plot indicates that the 4th eigenvalue is compatible # with that of a random matrix.data(holzinger) ho_pca = pca(holzinger) # from the screeplot we may choose to retain 4 components # produce a Wachter qqplot fitting a line to all but the largest # 4 eigenvalues. # Since pca was fitted using the data matrix, the fit carries the number # of observations. Otherwise we would need to pass `n_obs` . mp_qqplot(ho_pca, n_fitline = -4) # The qq-plot indicates that the 4th eigenvalue is compatible # with that of a random matrix.
Build an object of class spca from a weights matrix and either a
covariance or correlation matrix, a data matrix, or both.
new_spca(A, S = NULL, X = NULL, method_name = NULL)new_spca(A, S = NULL, X = NULL, method_name = NULL)
A |
A numeric matrix of weights. |
S |
A numeric covariance or correlation matrix (default |
X |
A numeric data matrix or data frame (default |
method_name |
A character scalar or |
An spca object.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
set.seed(1) A = round(matrix(runif(24, -1, 1), 12)) A[abs(A) < 0.4] = 0 #no need to scale to unit norm data(holzinger) spca_new = new_spca(A, X = holzinger) is.spca(spca_new) summary(spca_new)set.seed(1) A = round(matrix(runif(24, -1, 1), 12)) A[abs(A) < 0.4] = 0 #no need to scale to unit norm data(holzinger) spca_new = new_spca(A, X = holzinger) is.spca(spca_new) summary(spca_new)
Compute a principal component analysis (PCA) and return the result as an
spca object, so that it can be used with spca methods.
pca( M, n_comps = NULL, center_data = FALSE, scale_data = FALSE, fat_matrix = NULL, screeplot = TRUE, qq_plot = FALSE, n_obs = NULL, neigen_toplot = NULL, cor = TRUE, common_var = NULL, pm = FALSE, eps_pm = 1e-04, maxiter_pm = 1000 )pca( M, n_comps = NULL, center_data = FALSE, scale_data = FALSE, fat_matrix = NULL, screeplot = TRUE, qq_plot = FALSE, n_obs = NULL, neigen_toplot = NULL, cor = TRUE, common_var = NULL, pm = FALSE, eps_pm = 1e-04, maxiter_pm = 1000 )
M |
A data matrix, correlation matrix, or covariance matrix. |
n_comps |
An integer scalar or |
center_data |
A logical value (default |
scale_data |
A logical value (default |
fat_matrix |
A logical value or |
screeplot |
A logical value (default |
qq_plot |
A logical value (default |
n_obs |
An integer scalar or |
neigen_toplot |
An integer scalar or |
cor |
A logical value (default |
common_var |
A positive numeric scalar or |
pm |
A logical value (default |
eps_pm |
A positive numeric scalar (default |
maxiter_pm |
A positive integer scalar (default |
n_comps controls how many components are retained in the
returned object.
The tall backend computes PCA from the covariance or
correlation matrix, so passing this saves its computation from the data
matrix. If a covariance or correlation matrix is passed, the scores
cannot be computed and are returned as NULL.
The fat backend computes PCA in row space and converts the retained
eigenvectors back to variable weights.
An pca_object which is the same as an spca_object with an additional eigenvalues vector
containing the eigenvalues up to the rank used by the selected
backend and n_obs stores the number of observations, if a data
matrix is passed, or NULL.
Other pca:
aggregate_by_group(),
change_sign(),
is.pca(),
mp_qqplot(),
print.pca(),
scree_plot(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_pca = pca(holzinger, n_comps = 4, screeplot = TRUE, n_obs = 144, qq_plot = TRUE) summary(ho_pca)data(holzinger) ho_pca = pca(holzinger, n_comps = 4, screeplot = TRUE, n_obs = 144, qq_plot = TRUE) summary(ho_pca)
pca or spca ObjectPlot the sparse weights, or the corresponding percentage contributions, from a fitted object. The plot can be shown as a bar plot, circular bar plot, or heatmap.
## S3 method for class 'pca' plot(x, ...) ## S3 method for class 'spca' plot( x, n_plot = NULL, plot_type = c("bars", "circular", "heatmap"), contributions = TRUE, only_nonzero = TRUE, pc_weights = NULL, variable_groups = NULL, plot_title = NULL, return_plot = FALSE, show_plot = TRUE, controls = list(color_scale = c("ggplot", "cbb", "printsafe", "bw"), variable_names = c("none", "auto"), legend_position = c("none", "bottom", "right", "top", "left"), grid_type = c("horizontal", "full", "none"), facet_labels = NULL, legend_title = NULL, x_axis_lab = "variables", adjust_labels_circ = NULL, flip_heatmap = FALSE, heatmap_color_range = c("values", "unit")), ... )## S3 method for class 'pca' plot(x, ...) ## S3 method for class 'spca' plot( x, n_plot = NULL, plot_type = c("bars", "circular", "heatmap"), contributions = TRUE, only_nonzero = TRUE, pc_weights = NULL, variable_groups = NULL, plot_title = NULL, return_plot = FALSE, show_plot = TRUE, controls = list(color_scale = c("ggplot", "cbb", "printsafe", "bw"), variable_names = c("none", "auto"), legend_position = c("none", "bottom", "right", "top", "left"), grid_type = c("horizontal", "full", "none"), facet_labels = NULL, legend_title = NULL, x_axis_lab = "variables", adjust_labels_circ = NULL, flip_heatmap = FALSE, heatmap_color_range = c("values", "unit")), ... )
x |
An object of class |
... |
Further arguments. These are currently unused and trigger an error if supplied. |
n_plot |
An integer scalar or |
plot_type |
A character vector (default first element |
contributions |
A logical value (default |
only_nonzero |
A logical value (default |
pc_weights |
A numeric matrix, data frame, or |
variable_groups |
A vector, factor, or |
plot_title |
A character scalar or |
return_plot |
A logical value (default |
show_plot |
A logical value (default |
controls |
A list of graphical controls (default described below).
Supported entries are |
If pc_weights is supplied, SPCA and PCA values are plotted side by
side for comparison. Circular bar plots are not implemented for this
comparison, so a standard bar plot is used instead. In this case all
variables are plotted, regardless of only_nonzero.
For character arguments defined by a default vector of accepted values, the first element is the default and the first character of the supplied string is used for matching.
The entries in controls are:
color_scale: a character vector (default first element
"ggplot"). Accepted values are "ggplot", "cbb",
"printsafe", and "bw". "cbb" is colorblind-friendly
with black, "printsafe" is colorblind- and printer-friendly,
"bw" uses gray tones, and "ggplot" uses the default ggplot2
scale.
variable_names: a character vector or "auto" or
"none" (default "none"). If "auto", row names of the
weight matrix are used as variable names; if row names are missing, no
variable names are printed. NULL is a deprecated alias for
"auto" retained for backward compatibility; using it emits a warning
to use "auto" instead. If set to "none", variable names are
not shown. If a character vector of length is supplied, it is used
as the variable names.
legend_position: a character vector (default first element
"none"). Accepted values are "none", "bottom",
"right", "top", and "left".
grid_type: a character vector (default first element
"horizontal"). Accepted values are "horizontal",
"full", and "none".
facet_labels: a character vector or NULL (default
NULL). Optional facet labels for components.
legend_title: a character scalar or NULL (default
NULL). Optional legend title.
x_axis_lab: a character scalar (default "variables").
Label for the x axis.
adjust_labels_circ: a numeric vector or NULL (default
NULL). Optional angular adjustments for circular plot labels.
flip_heatmap: a logical value (default FALSE). If
TRUE, flip the heatmap axes.
heatmap_color_range: a character vector (default first element
"values"). Accepted values are "values" and "unit".
When variable groups are supplied, a legend is needed to identify the groups; if the legend is missing or suppressed, it is moved to the bottom. For circular plots, the legend is moved to the right unless it is suppressed.
If return_plot = TRUE, returns the ggplot2 object. Otherwise,
returns NULL invisibly.
plot(pca): A pca object is plotted identically to an
spca object.
The printsafe palette corresponds to OrRd from
https://colorbrewer2.org/.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
data(holzinger) ho_cspca = spca(holzinger, n_comps = 4) ho_plot = plot(ho_cspca, return_plot = TRUE) # Change faceting and legend position. ho_plot + ggplot2::facet_wrap( facets = ggplot2::vars(component), ncol = 4, nrow = 1 ) + ggplot2::theme(legend.position = "right")data(holzinger) ho_cspca = spca(holzinger, n_comps = 4) ho_plot = plot(ho_cspca, return_plot = TRUE) # Change faceting and legend position. ho_plot + ggplot2::facet_wrap( facets = ggplot2::vars(component), ncol = 4, nrow = 1 ) + ggplot2::theme(legend.position = "right")
pca or spca ObjectPrint sparse weights, or the corresponding percentage contributions, from a fitted object. By default, variables with only zero entries are omitted, and cumulative explained variance is shown at the bottom of the table.
## S3 method for class 'pca' print(x, ...) ## S3 method for class 'spca' print( x, cols = NULL, only_nonzero = TRUE, contributions = TRUE, digits = 3, thresh_card = 1e-07, return_table = FALSE, component_names = NULL, ... )## S3 method for class 'pca' print(x, ...) ## S3 method for class 'spca' print( x, cols = NULL, only_nonzero = TRUE, contributions = TRUE, digits = 3, thresh_card = 1e-07, return_table = FALSE, component_names = NULL, ... )
x |
An object of class |
... |
Further arguments. These are currently unused and trigger an error if supplied. |
cols |
An integer vector or |
only_nonzero |
A logical value (default |
contributions |
A logical value (default |
digits |
An integer scalar (default |
thresh_card |
A numeric scalar (default |
return_table |
A logical value (default |
component_names |
A character vector or |
If return_table = TRUE, returns the formatted character
matrix. Otherwise, returns NULL invisibly.
print(pca): A pca object is printed identically to an
spca object.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object,
summary.pca()
Other pca:
aggregate_by_group(),
change_sign(),
is.pca(),
mp_qqplot(),
pca(),
scree_plot(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_cspca = spca(holzinger, n_comps = 4) ho_cspca print(ho_cspca, contributions = FALSE, digits = 4)data(holzinger) ho_cspca = spca(holzinger, n_comps = 4) ho_cspca print(ho_cspca, contributions = FALSE, digits = 4)
Plot the leading eigenvalues of a fitted PCA against component order.
scree_plot( pca_fit, n_plot = NULL, ylab = "eigenvalues", addtitle = TRUE, show_plot = TRUE, return_plot = FALSE ) ## S3 method for class 'pca' scree_plot( pca_fit, n_plot = NULL, ylab = "eigenvalues", addtitle = TRUE, show_plot = TRUE, return_plot = FALSE )scree_plot( pca_fit, n_plot = NULL, ylab = "eigenvalues", addtitle = TRUE, show_plot = TRUE, return_plot = FALSE ) ## S3 method for class 'pca' scree_plot( pca_fit, n_plot = NULL, ylab = "eigenvalues", addtitle = TRUE, show_plot = TRUE, return_plot = FALSE )
pca_fit |
An object of class |
n_plot |
An integer scalar or |
ylab |
A character scalar (default |
addtitle |
A logical scalar (default |
show_plot |
A logical scalar (default |
return_plot |
A logical scalar (default |
This diagnostic applies only to objects of class "pca" (i.e. objects
returned by pca()). It does not apply to sparse fits returned by
spca() (class "spca"); no method is defined for that class, so
calling it on such an object raises the standard "no applicable
method" error rather than producing a plot.
If return_plot = TRUE, a ggplot object; otherwise NULL
invisibly.
Other pca:
aggregate_by_group(),
change_sign(),
is.pca(),
mp_qqplot(),
pca(),
print.pca(),
show_correlations(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_pca = pca(holzinger, screeplot = FALSE) # the screeplot can be produced from `pca` directly. # It can be customized by saving it as a `ggplot` object myscreeplot = scree_plot(ho_pca, return_plot = TRUE) myscreeplot + ggplot2::geom_point(color = "red")data(holzinger) ho_pca = pca(holzinger, screeplot = FALSE) # the screeplot can be produced from `pca` directly. # It can be customized by saving it as a `ggplot` object myscreeplot = scree_plot(ho_pca, return_plot = TRUE) myscreeplot + ggplot2::geom_point(color = "red")
pca or spca ObjectPrint and optionally return the mutual correlations among sparse principal components and their correlations with the corresponding principal components.
show_correlations( object, type = c("both", "spcs", "pcs"), digits = 2, print_matrices = TRUE, return_matrices = FALSE, spca_obj = NULL ) ## S3 method for class 'spca' show_correlations( object, type = c("both", "spcs", "pcs"), digits = 2, print_matrices = TRUE, return_matrices = FALSE, spca_obj = NULL )show_correlations( object, type = c("both", "spcs", "pcs"), digits = 2, print_matrices = TRUE, return_matrices = FALSE, spca_obj = NULL ) ## S3 method for class 'spca' show_correlations( object, type = c("both", "spcs", "pcs"), digits = 2, print_matrices = TRUE, return_matrices = FALSE, spca_obj = NULL )
object |
An object of class |
type |
A character value specifying which correlations to show. Values
beginning with |
digits |
A non-negative integer scalar (default |
print_matrices |
A logical value (default |
return_matrices |
A logical value (default |
spca_obj |
Deprecated alias for |
If return_matrices = TRUE, a numeric matrix when one type of
correlation is requested, or a named list of two numeric matrices when
type = "both". Otherwise, returns NULL invisibly.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_weights(),
spca(),
spca_object,
summary.pca()
Other pca:
aggregate_by_group(),
change_sign(),
is.pca(),
mp_qqplot(),
pca(),
print.pca(),
scree_plot(),
show_weights(),
spca_screeplot(),
wachter_qqplot()
data(holzinger) ho_cspca = spca(holzinger, n_comps = 3) show_correlations(ho_cspca) show_correlations(ho_cspca, type = "s", return_matrices = TRUE)data(holzinger) ho_cspca = spca(holzinger, n_comps = 3) show_correlations(ho_cspca) show_correlations(ho_cspca, type = "s", return_matrices = TRUE)
pca or spca ObjectShow selected nonzero component weights or their unit-L1 contributions.
show_weights( object, cols = NULL, contribution = TRUE, print_list = TRUE, return_list = FALSE, ..., spca_obj = NULL ) ## S3 method for class 'spca' show_weights( object, cols = NULL, contribution = TRUE, print_list = TRUE, return_list = FALSE, ..., spca_obj = NULL ) ## S3 method for class 'pca' show_weights(object, ...)show_weights( object, cols = NULL, contribution = TRUE, print_list = TRUE, return_list = FALSE, ..., spca_obj = NULL ) ## S3 method for class 'spca' show_weights( object, cols = NULL, contribution = TRUE, print_list = TRUE, return_list = FALSE, ..., spca_obj = NULL ) ## S3 method for class 'pca' show_weights(object, ...)
object |
An object of class |
cols |
An integer vector selecting components. If a single positive
integer is supplied, components |
contribution |
A logical value. If |
print_list |
A logical value indicating whether to print the result. |
return_list |
A logical value indicating whether to return the result. |
... |
Additional arguments reserved for S3 method compatibility. |
spca_obj |
Deprecated alias for |
The selected weights or contributions when requested; otherwise
NULL invisibly.
show_weights(pca): The weights or contributions of a pca object are shown
identically those of an spca object.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
spca(),
spca_object,
summary.pca()
Other pca:
aggregate_by_group(),
change_sign(),
is.pca(),
mp_qqplot(),
pca(),
print.pca(),
scree_plot(),
show_correlations(),
spca_screeplot(),
wachter_qqplot()
Compute least squares sparse principal components (LS-SPCA) from a data matrix or from a covariance/correlation matrix.
spca( M, n_comps = NULL, alpha = 0.95, ncomp_by_cvexp = NULL, method = c("cspca", "uspca", "pspca"), var_selection = c("fwd", "bkw", "step"), objective = c("cvexp", "r2"), intensive = FALSE, fat_matrix = NULL, fixed_index_list = NULL, center_data = FALSE, scale_data = FALSE, pm_weights = FALSE, eps_pm_weights = 1e-04, maxiter_pm_weights = 1000, pm_varsel = FALSE, eps_pm_varsel = 1e-04, maxiter_pm_varsel = 500 )spca( M, n_comps = NULL, alpha = 0.95, ncomp_by_cvexp = NULL, method = c("cspca", "uspca", "pspca"), var_selection = c("fwd", "bkw", "step"), objective = c("cvexp", "r2"), intensive = FALSE, fat_matrix = NULL, fixed_index_list = NULL, center_data = FALSE, scale_data = FALSE, pm_weights = FALSE, eps_pm_weights = 1e-04, maxiter_pm_weights = 1000, pm_varsel = FALSE, eps_pm_varsel = 1e-04, maxiter_pm_varsel = 500 )
M |
A numeric matrix or data frame. If |
n_comps |
A nonnegative integer scalar or |
alpha |
A numeric scalar in |
ncomp_by_cvexp |
A numeric scalar in |
method |
A character vector (default first element |
var_selection |
A character vector (default first element
|
objective |
A character vector (default |
intensive |
A logical value (default |
fat_matrix |
A logical value or |
fixed_index_list |
A list of integer-valued vectors, a factor, or
|
center_data |
A logical value (default |
scale_data |
A logical value (default |
pm_weights |
A logical value (default |
eps_pm_weights |
A positive numeric scalar (default |
maxiter_pm_weights |
A positive integer scalar (default |
pm_varsel |
A logical value (default |
eps_pm_varsel |
A positive numeric scalar (default |
maxiter_pm_varsel |
A positive integer scalar (default |
Data matrices are routed to the tall or fat C++ backend. Square matrices are treated as covariance/correlation matrices and use the tall backend.
Variable selection is controlled by var_selection, objective,
and intensive.
var_selection |
objective |
Algorithm |
"fwd" |
"r2" |
Forward selection with squared-correlation stopping |
"bkw" |
"r2" |
Backward elimination with squared-correlation stopping |
"step" |
"r2" |
Forward-stepwise selection with squared-correlation stopping |
"fwd" |
"cvexp" |
Forward selection with CVEXP stopping |
"bkw" |
"cvexp" |
Backward elimination with CVEXP stopping |
"step" |
"cvexp" |
Forward-stepwise selection with CVEXP stopping |
intensive = TRUE requires "fwd" |
"cvexp" |
Intensive forward CVEXP selection |
The fat backend currently supports regression-based forward variable
selection only: var_selection = "f" and intensive = FALSE.
Other combinations generate an error.
If both n_comps and ncomp_by_cvexp are supplied,
n_comps takes precedence and automatic stopping by cumulative
variance explained is disabled.
The returned object is documented in spca_object.
An object of class spca.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca_object,
summary.pca()
data(holzinger) #default ho_cspca = spca(holzinger, n_comps = 4) #uncorrelated components and subsets determined using CVEXP as stopping rule ho_uspca = spca(holzinger, n_comps = 4, method = "uspca", objective = "cvexp") #fix indices for components 1 and 3 and select them for component 2 ho_fixed = spca(holzinger, n_comps = 3, fixed_index_list = list(c(1, 2), NULL, c(2, 4, 6)))data(holzinger) #default ho_cspca = spca(holzinger, n_comps = 4) #uncorrelated components and subsets determined using CVEXP as stopping rule ho_uspca = spca(holzinger, n_comps = 4, method = "uspca", objective = "cvexp") #fix indices for components 1 and 3 and select them for component 2 ho_fixed = spca(holzinger, n_comps = 3, fixed_index_list = list(c(1, 2), NULL, c(2, 4, 6)))
Objects of class spca are returned by the fitting functions
spca(), pca(), and new_spca(). Objects returned by pca() also inherit
from class spca_pca.
An object of class spca is a list with the following elements:
matrix of sparse weights.
matrix of weights scaled to unit
norm within each sPC.
Number of sPCs.
Number of nonzero weights in each sPC.
Variance explained by each sPC.
Variance explained by the corresponding PCs.
Cumulative variance explained by the sPCs.
Ratio of vexp to the variance explained by the
corresponding PC.
Ratio of cvexp to the cumulative variance explained by
the corresponding PCs.
Correlation between each sPC and the corresponding PC.
Total variance of the data.
List of nonzero weight vectors, one per sPC.
correlation matrix of the
sPC scores.
List of variable indices with nonzero weights, one per sPC.
Optional matrix of sPC scores, returned only when a data matrix is supplied.
List of parameters used to compute an spca() fit.
Matched call used to compute an spca() fit.
For pca() objects, the available PCA eigenvalues.
For pca() objects, the number of observations when available.
For new_spca() objects, an optional method label.
For backward compatibility, methods also accept objects from earlier package
versions containing loadings and loadings_list instead of weights and
weights_list.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
summary.pca()
pca or spca ObjectPrint and, optionally, return summary statistics for evaluating an
spca object and comparing it with the corresponding PCA
solutions. It can also print the summaries of a pca object.
## S3 method for class 'pca' summary(object, ...) ## S3 method for class 'spca' summary( object, cols = NULL, contributions = TRUE, variance_metrics = c("both", "cumulative_relative", "relative", "none"), min_weight = FALSE, cor_with_pc = TRUE, return_table = FALSE, print_table = TRUE, thresh_card = 1e-08, ... )## S3 method for class 'pca' summary(object, ...) ## S3 method for class 'spca' summary( object, cols = NULL, contributions = TRUE, variance_metrics = c("both", "cumulative_relative", "relative", "none"), min_weight = FALSE, cor_with_pc = TRUE, return_table = FALSE, print_table = TRUE, thresh_card = 1e-08, ... )
object |
An object of class |
... |
Further arguments. These are currently unused and trigger an error if supplied. |
cols |
An integer vector of component indices or |
contributions |
A logical value (default |
variance_metrics |
A character vector (default first element
|
min_weight |
A logical value (default |
cor_with_pc |
A logical value (default |
return_table |
A logical value (default |
print_table |
A logical value (default |
thresh_card |
A numeric scalar (default |
For each component, the following summaries can be computed:
| Vexp | The percentage variance explained. |
| Cvexp | The percentage cumulative variance explained. |
| Rvexp | The variance explained relative to the corresponding PC. |
| Rcvexp | The cumulative variance explained relative to the corresponding PCs. |
| Card | The cardinality, that is the number of non zero weights. |
| Min weight/Min cont | The minimum absolute value of the nonzero weights or contributions, if requested. |
| r | The correlation between sPCs and the corresponding PCs, if requested. |
If return_table = TRUE, returns a numeric matrix with the
selected summary statistics. Otherwise, returns NULL invisibly.
summary(pca): Summarize a pca object using the shared
summary method.
Examples in aggregate_by_group.
Other spca:
aggregate_by_group(),
change_loadings_sign_spca(),
change_sign(),
change_weights_sign_spca(),
compare_spca(),
is.spca(),
new_spca(),
plot.pca(),
print.pca(),
show_contributions_spca(),
show_correlations(),
show_weights(),
spca(),
spca_object
data(holzinger) ho_cspca = spca(holzinger, n_comps = 2) summary(ho_cspca)data(holzinger) ho_cspca = spca(holzinger, n_comps = 2) summary(ho_cspca)