dpoMatrix-class function

Positive Semi-definite Dense (Packed | Non-packed) Numeric Matrices

Positive Semi-definite Dense (Packed | Non-packed) Numeric Matrices

  • 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.

class

Objects from the Class

Objects can be created by calls of the form new("dpoMatrix", ...) or from crossprod applied to an "dgeMatrix" object.

Slots

  • 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(.))sqrt(var(.)) entries which allow reconstruction of a covariance matrix from the correlation matrix.

Extends

Class "dsyMatrix", directly.

Classes "dgeMatrix", "symmetricMatrix", and many more by class "dsyMatrix".

Methods

  • chol: signature(x = "dpoMatrix"): Returns (and stores) the Cholesky decomposition of x, see chol.

  • determinant: signature(x = "dpoMatrix"): Returns the determinant of x, via chol(x), see above.

  • rcond: 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.

  • solve: signature(a = "dpoMatrix", b = "...."), and

  • solve: signature(a = "dppMatrix", b = "....") work via the Cholesky composition, see also the Matrix solve-methods.

  • Arith: 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).
    

Note

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")) .

See Also

Classes dsyMatrix and dgeMatrix; further, Matrix, rcond, chol, solve, crossprod.

Examples

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$Cholesky), all(abs(crossprod(as(chch, "dtrMatrix")) - ch6) < 1e-10))
  • Maintainer: Martin Maechler
  • License: GPL (>= 2) | file LICENCE
  • Last published: 2025-03-11