posdef.approx {monomvn} | R Documentation |
Check if the matrix is positive definite via attempted
Cholesky decomposition and inversion. If not, then the
sechol
function is used to obtain the nearest
approximate Cholesky decomposition from which to recover an
approximate covariance matrix which is positive definite.
If that doesn't do the trick, then .Machine$double.eps
is
added to the diagonal (as a last-ditch effort) until a positive
definite matrix can be returned
posdef.approx(S, name = "S", quiet=FALSE)
S |
square matrix which is supposed to be positive
definite |
name |
optional name of the matrix – used for printing errors and warnings |
quiet |
whether or not to print a warning when a
non-positive definite matrix is found |
Returns a matrix
which is positive definite:
either the original matrix, or a nearby positive definite
approximation
Robert B. Gramacy bobby@statslab.cam.ac.uk
Micah Altman, Jeff Gill and Michael McDonald (2003).
Numerical Issues in Statistical Computing for the Social
Scientist. John Wiley and Sons, New York.
http://www.hmdc.harvard.edu/micah_altman/numal/
http://www.statslab.cam.ac.uk/~bobby/monomvn.html
sechol
in the accuracy package
## most likely generates a matrix which is close to positive definite ## but not quite s <- matrix(rnorm(100), ncol=5) S <- (t(s) %*% s) + matrix(rnorm(25, sd=10), ncol=5) S ## a correction, quiet=TRUE so there is no warning printed posdef.approx(S, quiet=TRUE)