??? FAQ: Positive definite input matrix
I am trying to run a multivariate analysis, but WOMBAT stops immediately with a message that that the ''Matrix of starting values is "invalid"''.
- What does this mean and what can I do about it?
- And why can't WOMBAT fix this automatically?
?
!!! Covariance matrices for multivariate (and random regression) analyses must be **positive definite** (p.d.).
- **The statistical definition** is that for a p.d. matrix **A**, all quadratic forms **x'Ax** are positive, with **x** an arbitrary vector of appropriate dimension. A p.d. covariance matrix implies that all variances are positive, that all correlations are less than __unity__ (absolute value), and that all partial correlations are consistent with each other.
- **How can you tell whether a matrix is p.d. or not?** The easiest way to decide whether a matrix is p.d. is to inspect its //eigenvalues// or its Cholesky decomposition. There are many software packages available to do this. For instance, in R ''eigen()'' will give you the eigenvalue decomposition and ''chol()'' the Cholesky factor (you can also use the ''−−inveig'' option in WOMBAT to look at eigenvalues).\\ A p.d. matrix cannot have any negative or zero eigenvalues or non-positive `pivots' (diagonal elements) in the Cholesky factor. This is the requirement for standard, full rank analyses in WOMBAT; for reduced rank analyses via the PC option, the number of non-zero eigenvalues (or pivots) has to be at least equal to the number of principal components fitted.
- **How does WOMBAT deal** with matrices that are not p.d.? During estimation, WOMBAT constrains estimated matrices to have these properties, checking eigenvalues at each iteration step.\\ However, if it finds a `invalid' matrix of starting values, it will stop with an error message. While the program could, in principle, readily carry out the necessary calculations to modify such `invalid' starting values, this may lead to rather bad starting values and is thus not done.
* Update: Recent versions of WOMBAT will attempt to 'fix' matrices of starting values which are just a little bit 'off', i.e. have eigenvalues close to zero, to make life easier. However, it is still best if you make sure your starting values are appropriate - your analysis will run faster and be less less likely to run into problems if you provide starting values derived from preliminary uni- and bivariate analyses and matrices which are safely positive-definite!
- **What can you do about it?** To fix the problem, modify your input matrix until all eigenvalues are positive. WOMBAT uses a Cholesky factorization to check starting values. If the error message complains about a (negative) pivot close to zero, adding a small constant to the diagonals is often sufficient to make a matrix p.d.; if the negative pivot is not close to zero, something else is likely to have gone wrong -- this could be as simple as a typing error or having specified the lower rather than the upper triangle of the covariance matrix.