PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_correg_corrmat_nearest_kfactor (g02ae)
Purpose
nag_correg_corrmat_nearest_kfactor (g02ae) computes the factor loading matrix associated with the nearest correlation matrix with -factor structure, in the Frobenius norm, to a given square, input matrix.
Syntax
[
g,
x,
iter,
feval,
nrmpgd,
ifail] = g02ae(
g,
k, 'n',
n, 'errtol',
errtol, 'maxit',
maxit)
[
g,
x,
iter,
feval,
nrmpgd,
ifail] = nag_correg_corrmat_nearest_kfactor(
g,
k, 'n',
n, 'errtol',
errtol, 'maxit',
maxit)
Description
A correlation matrix with -factor structure may be characterised as a real square matrix that is symmetric, has a unit diagonal, is positive semidefinite and can be written as , where is the identity matrix and has rows and columns. is often referred to as the factor loading matrix.
nag_correg_corrmat_nearest_kfactor (g02ae) applies a spectral projected gradient method to the modified problem such that , for , where is the th row of the factor loading matrix, , which gives us the solution.
References
Birgin E G, Martínez J M and Raydan M (2001) Algorithm 813: SPG–software for convex-constrained optimization ACM Trans. Math. Software 27 340–349
Borsdorf R, Higham N J and Raydan M (2010) Computing a nearest correlation matrix with factor structure. SIAM J. Matrix Anal. Appl. 31(5) 2603–2622
Parameters
Compulsory Input Parameters
- 1:
– double array
-
ldg, the first dimension of the array, must satisfy the constraint
.
, the initial matrix.
- 2:
– int64int32nag_int scalar
-
, the number of factors and columns of .
Constraint:
.
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
g and the second dimension of the array
g. (An error is raised if these dimensions are not equal.)
, the order of the matrix .
Constraint:
.
- 2:
– double scalar
Default:
The termination tolerance for the projected gradient norm. See references for further details. If then is used. This is often a suitable default value.
- 3:
– int64int32nag_int scalar
Default:
Specifies the maximum number of iterations in the spectral projected gradient method.
If , is used.
Output Parameters
- 1:
– double array
-
A symmetric matrix with the diagonal elements set to unity.
- 2:
– double array
-
Contains the matrix .
- 3:
– int64int32nag_int scalar
-
The number of steps taken in the spectral projected gradient method.
- 4:
– int64int32nag_int scalar
-
The number of evaluations of .
- 5:
– double scalar
-
The norm of the projected gradient at the final iteration.
- 6:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Errors or warnings detected by the function:
-
-
Constraint: .
Constraint: .
Constraint: .
Constraint: .
-
-
Spectral gradient method fails to converge in iterations.
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
The returned accuracy is controlled by
errtol and limited by
machine precision.
Further Comments
Arrays are internally allocated by
nag_correg_corrmat_nearest_kfactor (g02ae). The total size of these arrays is
double elements and
integer elements.
Here
is the block size required for optimal performance by
nag_lapack_dsytrd (f08fe) and
nag_lapack_dormtr (f08fg) which are called internally. All allocated memory is freed before return of
nag_correg_corrmat_nearest_kfactor (g02ae).
See
nag_mv_factor (g03ca) for constructing the factor loading matrix from a known correlation matrix.
Example
This example finds the nearest correlation matrix with
factor structure to:
Open in the MATLAB editor:
g02ae_example
function g02ae_example
fprintf('g02ae example results\n\n');
g = [2, -1, 0, 0;
-1, 2, -1, 0;
0, -1, 2, -1;
0, 0, -1, 2];
k = int64(2);
[g, x, iter, feval, nrmpgd, ifail] = ...
g02ae(g, k);
fprintf('\n Factor Loading Matrix x:\n');
disp(x);
fprintf('\n Number of Newton steps taken: %d\n', iter);
fprintf(' Number of function evaluations: %d\n', feval);
fprintf('\n Nearest Correlation Matrix:\n');
disp(x*transpose(x) + diag(diag(eye(4)-x*transpose(x))));
g02ae example results
Factor Loading Matrix x:
0.7665 -0.6271
-0.4250 0.9052
-0.4250 -0.9052
0.7665 0.6271
Number of Newton steps taken: 5
Number of function evaluations: 6
Nearest Correlation Matrix:
1.0000 -0.8935 0.2419 0.1943
-0.8935 1.0000 -0.6388 0.2419
0.2419 -0.6388 1.0000 -0.8935
0.1943 0.2419 -0.8935 1.0000
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015