# [R] positive semi-definite matrix

Fri Jul 21 17:33:23 CEST 2006

```There is a paper by N.J. Higham (SIAM J Matrix Anal, 1998) on a modified
cholesky decomposition of symmetric and not necessarily positive definite
matrix (say, A), with an important goal of producing a "small-normed"
perturbation of A (say, delA), that makes (A + delA) positive definite.
http://epubs.siam.org/sam-bin/dbq/article/30289

There is also an algorithm in Gill, Murray and Wright's text - Practical
Optimization (section 4.4.2).

These may be relevant to your problem.  I am not sure if these algorithms
have been implemented in R, for example, in the "matrix" library.

Ravi.

--------------------------------------------------------------------------
Assistant Professor,  The Center on Aging and Health
Division of Geriatric Medicine and Gerontology
Johns Hopkins University
Ph: (410) 502-2619
Fax: (410) 614-9625
--------------------------------------------------------------------------

> -----Original Message-----
> From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-
> bounces at stat.math.ethz.ch] On Behalf Of Duncan Murdoch
> Sent: Friday, July 21, 2006 9:45 AM
> To: roger bos
> Cc: RHelp
> Subject: Re: [R] positive semi-definite matrix
>
> On 7/21/2006 8:59 AM, roger bos wrote:
> > I have a covariance matrix that is not positive semi-definite matrix and
> I
> > need it to be via some sort of adjustment.  Is there any R routine or
> > package to help me do this?
>
> I think you need to be more specific about what have and what you want,
> but if the matrix is symmetric and nearly positive semi-definite (but
> not exactly because of rounding error), you might try something like
>
> fixit <- function(A) {
>    eig <- eigen(A, symmetric = TRUE)
>    eig\$values <- pmax(0, eig\$values)
>    return(eig\$vectors %*% diag(eig\$values) %*% t(eig\$vectors))
> }
>
> Rounding error means this is not guaranteed to be positive
> semi-definite, but it will be very close.
>
> Duncan Murdoch
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help