1. Home
2. POSSEMIDEFINITE procedure

# POSSEMIDEFINITE procedure

Calculates a positive semi-definite approximation of a non-positive semi-definite symmetric matrix (L.C.P Keizer, M. Malosetti & J.T.N.M. Thissen).

### Options

`PRINT` = string tokens Controls printed output (`approximation`, `eigenvalues`, `epsilon`); default `*` i.e. none Specifies the lowest eigenvalue for the positive semi-definite matrix; default 0.0001

### Parameters

`OLDSYMMETRICMATRIX` = symmetric matrices Symmetric matrices to approximate Positive semi-definite approximations to the old symmetric matrices

### Description

`POSSEMIDEFINITE` forms a positive semi-definite symmetric matrix to approximate an input symmetric matrix that is not positive semi-definite. The original symmetric matrix is supplied by the `OLDSYMMETRICMATRIX` parameter, and the new approximate matrix can be saved by the `NEWSYMMETRICMATRIX` parameter.

The `EPSILON` option specifies the lowest eigenvalue for the positive semi-definite symmetrical matrix; default 0.0001. Printed output is controlled by the `PRINT` option, with settings:

    `approximation` prints the positive semi-definite symmetric matrix approximating the original matrix, prints the eigenvalues, and prints the value used to set the lowest eigenvalue for the approximate matrix.

By default, nothing is printed.

Options: `PRINT`, `EPSILON`.

Parameters: `OLDSYMMETRICMATRIX`, `NEWSYMMETRICMATRIX`.

### Method

`POSSEMIDEFINITE` uses the `FLRV` directive to calculate the eigenvalues and eigenvectors of the input symmetric matrix. If the matrix contains missing values they are replaced by zero. All eigenvalues below the value specified by the `EPSILON` option are replaced by that value. The positive semi-definite matrix is then calculated as

`V +* D *+ TRANSPOSE(V)`

where `V` is the matrix of eigenvectors, and `D` is a diagonal matrix containing the new eigenvalues.

Procedure: `LINDEPENDENCE`.

Commands for: Calculations and manipulation.

### Example

```CAPTION         'POSSEMIDEFINITE example'; STYLE=meta
SYMMETRIC       [ROWS=5; VALUES=1,0,1,1,0.5,1,0,1,1,0.5,1,0,1,1,0.5] nonpos
PRINT           nonpos
POSSEMIDEFINITE [PRINT=approximation,eigenvalues] nonpos;\
NEWSYMMETRICMATRIX=pos
POSSEMIDEFINITE [PRINT=approximation,eigenvalues; EPSILON=1.0e-2] nonpos;\
NEWSYMMETRICMATRIX=newin
```
Updated on March 6, 2019