Als: Difference between revisions
imported>Jeremy (Importing text file) |
imported>Neal |
||
Line 1: | Line 1: | ||
===Purpose=== | ===Purpose=== | ||
Line 10: | Line 9: | ||
===Description=== | ===Description=== | ||
ALS decomposes a matrix X as CS such that X = CS + E where E is minimized in a least squares sense. | 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 ( | Inputs are the matrix to be decomposed (x) (''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'' = ''K'' then, (c0) is assumed to be the initial guess for '''C'''. | ||
An optional input options is described below. | An optional input (options) is described below. | ||
The outputs are the estimated | The outputs are the estimated matrices '''C''', (c), (''M'' by ''K'') and '''S''', (s), (''K'' by ''N''). For a typical decomposition, (c) is a matrix of contributions and (s) is a matrix of spectra. The function | ||
:[c,s] = als(x,c0) | :[c,s] = als(x,c0) | ||
will decompose x using an non-negatively constrained alternating least squares | will decompose (x) using an non-negatively constrained alternating least squares. To include other constraints, use the (options) input 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. | 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. |
Revision as of 09:30, 25 September 2008
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) (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 = K then, (c0) is assumed to be the initial guess for C.
An optional input (options) is described below.
The outputs are the estimated matrices C, (c), (M by K) and S, (s), (K by N). For a typical decomposition, (c) is a matrix of contributions 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. To include other constraints, use the (options) input 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 1/2 of total signal in X
- [c,s] = als(x,c0,options);