Skip to contents

msPCA 0.5.1

  • mspca() now records feasibilityConstraintType and nonredundancy in the returned object. nonredundancy holds two r x r matrices, orthogonality () and uncorrelatedness ().
  • summary.mspca() now displays the feasibilityConstraintType used at fitting and the feasibility violation matrix in nonredundancy instead of recomputing them. Its printed output now names the constraint definition in use and points to the stored matrices for the other one.
  • New weighting rule for the per-component penalty weights to unify both constraint types and improve convergence.
  • Uncorrelatedness violations are now normalized by the total variance tr(Sigma), i.e. the pairwise term is |u_t' Sigma u_s| / tr(Sigma). The normalized measure is now invariant to a rescaling of Sigma. This affects mspca(..., feasibilityConstraintType = 1) (the feasibility_violation field, the stopping rule, and the dual step size), feasibility_violation_off(), and the uncorrelatedness matrix in nonredundancy. Numerical results under feasibilityConstraintType = 1 may differ from earlier versions unless the input has tr(Sigma) = 1.
  • Additional input checks for mspca().
  • Minor documentation updates and clarification.
  • Added the snp500 dataset: the market-deflated correlation matrix of daily log-returns for 423 S&P 500 constituents, January 2010 - December 2019 (423 x 423, xz-compressed).
  • Added a vignette “Case study: sparse factors in S&P 500 returns”, a full application of mspca() to snp500 comparing the two non-redundancy constraints.
  • Added a vignette “Algorithm and implementation notes”, documenting the optimization problem, both algorithms, the implicit matrix-vector implementation, computational complexity, and guidance on parameter choices.
  • Added a website-only article “Benchmarking against other sparse PCA packages”, comparing mspca() against seven competing implementations on four real datasets. It lives in vignettes/articles/ and is not part of the CRAN build.
  • Added replication/, the scripts reproducing the benchmarking and case-study results. Build-ignored.
  • DESCRIPTION gains Depends: R (>= 3.5), LazyData: true, LazyDataCompression: xz and BugReports.

msPCA 0.5.0

CRAN release: 2026-06-25

  • mspca() and tpm() now take two possible inputs: the covariance/correlation matrix or the data matrix directly. In practice, the functions take single generic argument M together with a type = c("Sigma", "X") selector. type = "Sigma" (the default) treats M as a covariance/correlation matrix (p x p); type = "X" treats M as a raw data matrix (n observations x p variables). The "Sigma" default preserves the behaviour of existing matrix-based calls.
  • The raw-data path applies the algorithm to the data directly: each product Sigma %*% beta is evaluated as t(X) %*% (X %*% beta) / (n - 1) at cost O(np), and the p x p matrix is never materialized. This substantially improves scalability when n << p. The covariance back-end was refactored behind a covariance-operator abstraction (DenseOp / GramOp) shared by both input modes.
  • Added preprocessing controls for type = "X": center, scale (covariance vs correlation), and divisor (“n-1” or “n”).
  • Added validation for both input modes: a Sigma input is checked for squareness, symmetry and positive semidefiniteness (checkPSD, symTolerance, psdTolerance); an X input is checked for finiteness, dimensions and (when scaling) zero-variance columns.
  • mspca() results now include variance_explained (per-PC) and total_variance; X-mode results also record inputType, center, scale, divisor, nObs and p.
  • mspca() and tpm() now return S3 objects of class "mspca" and "tpm" respectively, enabling use of standard R generics.
  • Added print.mspca(): S3 print method displaying the sparse loading matrix restricted to the union of active variables, the percentage of variance explained per PC, and the number of non-zero loadings. Replaces the removed print_mspca().
  • Added summary.mspca(): produces a per-PC table of sparsity, variance explained, FVE, and cumulative FVE, followed by the full pairwise feasibility violation matrix.
  • Updated citation

msPCA 0.4.1

CRAN release: 2026-06-12

  • Standardized function man page titles to consistent title style.
  • Removed unnecessary library(datasets) calls from examples while keeping explicit datasets::mtcars usage, and added datasets to Suggests to align example dependencies with CRAN guidance.
  • Improved efficiency and clarity of R code
  • Added a vignette

msPCA 0.4.0

CRAN release: 2026-05-22

  • Renamed hyperparameters controlling truncated power method restart budgets for clearer and more consistent API naming.
  • Documentation polish across function docs and package materials.
  • Removed pairwise_correlation() and orthogonality_violation() and replaced them with a unified feasibility_violation_off() helper for feasibility diagnostics across constraint types.

msPCA 0.3.0

CRAN release: 2026-05-15

  • Improved scalability of mspca() and tpw() through algorithmic and implementation optimizations.
  • Function mspca() now accepts a new hyper-parameter minRestartTPM that limits the number of random restarts for the truncated power method after the first outer iteration
  • Improved scaling of the penalty parameters for the case of zero-correlation constraints
  • Fixed incorrect acronym for truncated power method (TPW <- TPM)

msPCA 0.2.0

CRAN release: 2026-01-12

  • Added support for no-correlation constraints between PCs as well as orthogonality constraints. User chooses between orthogonality and uncorrelatedness constraints via the feasibilityConstraintType parameter to msPCA().
  • Renamed return field from orthogonality_violation to feasibility_violation to support both constraint types.
  • Renamed function feasibility_violation() as orthogonality_violation() to be more explicit
  • Created function pairwise_correlation()
  • Added warning message when no feasible solution is found

msPCA 0.1.0

CRAN release: 2025-12-09

  • Initial CRAN release