Learn R Programming

dlm (version 1.1-2)

dlmSvd2var: Compute a nonnegative definite matrix from its Singular Value Decomposition

Description

The function computes a nonnegative definite matrix from its Singular Value Decomposition.

Usage

dlmSvd2var(u, d)

Arguments

u
a square matrix, or a list of square matrices for a vectorized usage.
d
a vector, or a matrix for a vectorized usage.

Value

  • The function returns a nonnegative definite matrix, reconstructed from its SVD, or a list of such matrices (see details above).

Details

The SVD of a nonnegative definite $n$ by $n$ square matrix $x$ can be written as $u d^2 u'$, where $u$ is an $n$ by $n$ orthogonal matrix and $d$ is a diagonal matrix. For a single matrix, the function returns just $u d^2 u'$. Note that the argument d is a vector containing the diagonal elements of $d$. For a vectorized usage, u is a list of square matrices, and d is a matrix. The returned value in this case is a list of matrices, with the element $i$ being u[[i]] %*% diag(d[i,]^2) %*% t(u[[i]]).

References

Horn and Johnson, Matrix analysis, Cambridge University Press (1985)

Examples

Run this code
x <- matrix(rnorm(16),4,4)
x <- crossprod(x)
tmp <- La.svd(x)
all.equal(dlmSvd2var(tmp$u, sqrt(tmp$d)), x)
## Vectorized usage
x <- dlmFilter(Nile, dlmModPoly(1, dV=15099, dW=1469))
x$se <- sqrt(unlist(dlmSvd2var(x$U.C, x$D.C)))
## Level with 50\% probability interval
plot(Nile, lty=2)
lines(dropFirst(x$m), col="blue")
lines(dropFirst(x$m - .67*x$se), lty=3, col="blue")
lines(dropFirst(x$m + .67*x$se), lty=3, col="blue")

Run the code above in your browser using DataLab