als
Purpose
Alternating Least Squares computational engine for
multivariate curve resolution (MCR).
Synopsis
[c,s] = als(x,c0,options);
Description
ALS decomposes a matrix X as CS such that X = CS + E where E
is minimized in a least squares sense.
Inputs are the matrix to be decomposed x (size m by n),
and the initial guess c0.
If c0 is size m by k, where k is the number of factors, then it is assumed to be
the initial guess for C. If c0
is size k by n then it is assumed to be
the initial guess for S (If m=n then, c0 is assumed to be the
initial guess for C).
An optional input options is described below.
The outputs are the estimated matrix c (m by k) and s (k by n). Usually c is a matrix of contributionss and s is a matrix of spectra.
The function
[c,s] = als(x,c0)
will decompose x
using an non-negatively constrained alternating least squares calculation. To
include other constraints, use the options described below.
Note that if no non-zero equality constraints are imposed on a
factor the spectra are normalized to unit length. This can lead to significant
scaling differences between factors that have non-zero equality constraints and
those that do not.
Options
display: [ 'off' | {'on'} ] governs level of display to
command window,
plots: [ 'none' | {'final'} ]
governs level of plotting,
ccon: [ 'none' | 'reset' | {'fastnnls'} ]
non-negativity on contributionss, (fastnnls = true
least-squares solution)
scon: [ 'none' | 'reset' | {'fastnnls'} ]
non-negativity on spectra, (fastnnls = true
least-squares solution)
cc: [ ] contributions equality constraints, must
be a matrix with M rows and up to K columns with NaN where equality constraints
are not applied and real value of the constraint where they are applied. If
fewer than K columns are supplied, the missing columns will be filled in as
unconstrained,
ccwts: [inf] a scalar value or a 1xK vector with
elements corresponding to weightings on constraints (0, no constraint,
0<wt<inf imposes constraint "softly", and inf is hard
constrained). If a scalar value is passed for ccwts, that value is applied for
all K factors,
sc: [ ] spectra equality constraints, must be a
matrix with N columns and up to K rows with NaN where equality contraints are
not applied and real value of the constraint where they are applied. If fewer
than K rows are supplied, the missing rows will be filled in as unconstrained.
scwts: [inf] weighting for spectral equality
constraints (see ccwts)
sclc: [ ] contributions scale axis, vector with M
elements otherwise 1:M is used,
scls: [ ] spectra scale axis, vector with N
elements otherwise 1:N is used,
condition:
[{'none'}| 'norm' ] type of conditioning to perform on S and C before each
regression step. 'norm' conditions each spectrum or contributions to its own
norm. Conditioning can help stabilize the regression when factors are
significantly different in magnitude.
tolc: [ {1e-5} ] tolerance on non-negativity for
contributionss,
tols: [ {1e-5} ] tolerance on non-negativity for
spectra,
ittol: [ {1e-8} ] convergence tolerance,
itmax: [ {100} ] maximum number of iterations,
timemax: [ {3600} ] maximum time for iterations,
rankfail: [ 'drop' |{'reset'}| 'random' | 'fail' ] how are
rank deficiencies handled:
drop - drop deficient components from model
reset - reset deficient components to
initial guess
random - replace deficient components with
random vector
fail - stop analysis, give error
Examples
To decompose a matrix x without non-negativity constraints
use:
options = als(‘options’);
options.ccon = ‘none’;
options.scon = ‘none’;
[c,s] = als(x,c0,options);
The following shows an example of using soft-constraints on
the second spectral component of a three-component solution assuming that the
variable softs
contains the spectrum to which component two should be constrained.
[m,n] = size(x);
options = als(‘options’);
options.sc = NaN*ones(3,n); %all 3 unconstrained
options.sc(2,:) = softs; %constrain component 2
options.scwts = 0.5; %consider as ˝ of total
signal in X
[c,s] = als(x,c0,options);
See Also
mcr, parafac, pca