[R] positive semi-definite matrix
Martin Maechler
maechler at stat.math.ethz.ch
Fri Jul 21 17:00:41 CEST 2006
>>>>> "Duncan" == Duncan Murdoch <murdoch at stats.uwo.ca>
>>>>> on Fri, 21 Jul 2006 09:44:42 -0400 writes:
Duncan> 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?
Duncan> I think you need to be more specific about what have and what you want,
Duncan> but if the matrix is symmetric and nearly positive semi-definite (but
Duncan> not exactly because of rounding error), you might try something like
Duncan> fixit <- function(A) {
Duncan> eig <- eigen(A, symmetric = TRUE)
Duncan> eig$values <- pmax(0, eig$values)
Duncan> return(eig$vectors %*% diag(eig$values) %*% t(eig$vectors))
Duncan> }
Duncan> Rounding error means this is not guaranteed to be positive
Duncan> semi-definite, but it will be very close.
A slightly more general and stable version of the above
is available via sfsmisc::posdefify(.) :
install.packages("sfsmisc")
?posdefify
Martin Maechler, ETH Zurich
More information about the R-help
mailing list