posdef-class | R Documentation |
The "dpoMatrix"
class is the class of
positive-semidefinite symmetric matrices in nonpacked storage.
The "dppMatrix"
class is the same except in packed
storage. Only the upper triangle or the lower triangle is
required to be available.
The "corMatrix"
and "copMatrix"
classes
represent correlation matrices. They extend "dpoMatrix"
and "dppMatrix"
, respectively, with an additional slot
sd
allowing restoration of the original covariance matrix.
Objects can be created by calls of the
form new("dpoMatrix", ...)
or from crossprod
applied to
an "dgeMatrix"
object.
uplo
:Object of class "character"
. Must be
either "U", for upper triangular, and "L", for lower triangular.
x
:Object of class "numeric"
. The numeric
values that constitute the matrix, stored in column-major order.
Dim
:Object of class "integer"
. The dimensions
of the matrix which must be a two-element vector of non-negative
integers.
Dimnames
:inherited from class "Matrix"
factors
:Object of class "list"
. A named
list of factorizations that have been computed for the matrix.
sd
:(for "corMatrix"
and "copMatrix"
)
a numeric
vector of length n
containing the
(original) \sqrt{var(.)}
entries which allow
reconstruction of a covariance matrix from the correlation matrix.
Class "dsyMatrix"
, directly.
Classes "dgeMatrix"
, "symmetricMatrix"
, and many more
by class "dsyMatrix"
.
signature(x = "dpoMatrix")
:
Returns (and stores) the Cholesky decomposition of x
, see
chol
.
signature(x = "dpoMatrix")
:
Returns the determinant
of x
, via
chol(x)
, see above.
signature(x = "dpoMatrix", norm = "character")
:
Returns (and stores) the reciprocal of the condition number of
x
. The norm
can be "O"
for the
one-norm (the default) or "I"
for the infinity-norm. For
symmetric matrices the result does not depend on the norm.
signature(a = "dpoMatrix", b = "....")
, and
signature(a = "dppMatrix", b = "....")
work
via the Cholesky composition, see also the Matrix solve-methods
.
signature(e1 = "dpoMatrix", e2 = "numeric")
(and
quite a few other signatures): The result of (“elementwise”
defined) arithmetic operations is typically not
positive-definite anymore. The only exceptions, currently, are
multiplications, divisions or additions with positive
length(.) == 1
numbers (or logical
s).
Currently the validity methods for these classes such as
getValidity(getClass("dpoMatrix"))
for efficiency reasons
only check the diagonal entries of the matrix – they may not be negative.
This is only necessary but not sufficient for a symmetric matrix to be
positive semi-definite.
A more reliable (but often more expensive) check for positive
semi-definiteness would look at the signs of diag(BunchKaufman(.))
(with some tolerance for very small negative values), and for (strict)
positive definiteness at something like
!inherits(tryCatch(chol(.), error=identity), "error")
.
Indeed, when coercing to these classes, a version
of Cholesky()
or chol()
is
typically used, e.g., see selectMethod("coerce",
c(from="dsyMatrix", to="dpoMatrix"))
.
Classes dsyMatrix
and dgeMatrix
;
further, Matrix
, rcond
,
chol
, solve
, crossprod
.
h6 <- Hilbert(6)
rcond(h6)
str(h6)
h6 * 27720 # is ``integer''
solve(h6)
str(hp6 <- pack(h6))
### Note that as(*, "corMatrix") *scales* the matrix
(ch6 <- as(h6, "corMatrix"))
stopifnot(all.equal(as(h6 * 27720, "dsyMatrix"), round(27720 * h6),
tolerance = 1e-14),
all.equal(ch6@sd^(-2), 2*(1:6)-1,
tolerance = 1e-12))
chch <- Cholesky(ch6, perm = FALSE)
stopifnot(identical(chch, ch6@factors[["denseCholesky+-"]]),
all(abs(crossprod(as(chch, "dtrMatrix")) - ch6) < 1e-10))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.