iam {VGAM} | R Documentation |
Index from Array to Matrix
Description
Maps the elements of an array containing symmetric positive-definite matrices to a matrix with sufficient columns to hold them (called matrix-band format.)
Usage
iam(j, k, M, both = FALSE, diag = TRUE)
Arguments
j |
Usually an integer from the set { |
k |
An integer from the set { |
M |
The number of linear/additive predictors. This is the dimension of each positive-definite symmetric matrix. |
both |
Logical. Return both the row and column indices? See below for more details. |
diag |
Logical. Return the indices for the diagonal elements?
If |
Details
Suppose we have n
symmetric positive-definite square
matrices,
each M
by M
, and
these are stored in an array
of dimension c(n,M,M)
.
Then these can be more compactly represented by a matrix
of dimension c(n,K)
where K
is an integer between
M
and M*(M+1)/2
inclusive. The mapping between
these two representations is given by this function.
It firstly enumerates by the diagonal elements, followed by
the band immediately above the diagonal, then the band above
that one, etc.
The last element is (1,M)
.
This function performs the mapping from elements (j,k)
of symmetric positive-definite square matrices to the columns
of another matrix representing such. This is called the
matrix-band format and is used by the VGAM package.
Value
This function has a dual purpose depending on the value of
both
. If both = FALSE
then the column number
corresponding to the j
-k
element of the matrix is
returned. If both = TRUE
then j
and k
are
ignored and a list with the following components are returned.
row.index |
The row indices of the upper triangular part of the
matrix (This may or may not include the diagonal elements,
depending on the argument |
col.index |
The column indices of the upper triangular part of the
matrix (This may or may not include the diagonal elements,
depending on the argument |
Note
This function is used in the weight
slot of many
VGAM family functions
(see vglmff-class
),
especially those whose M
is determined by the data,
e.g., dirichlet
, multinomial
.
Author(s)
T. W. Yee
See Also
Examples
iam(1, 2, M = 3) # The 4th coln represents elt (1,2) of a 3x3 matrix
iam(NULL, NULL, M = 3, both = TRUE) # Return the row & column indices
dirichlet()@weight
M <- 4
temp1 <- iam(NA, NA, M = M, both = TRUE)
mat1 <- matrix(NA, M, M)
mat1[cbind(temp1$row, temp1$col)] = 1:length(temp1$row)
mat1 # More commonly used
temp2 <- iam(NA, NA, M = M, both = TRUE, diag = FALSE)
mat2 <- matrix(NA, M, M)
mat2[cbind(temp2$row, temp2$col)] = 1:length(temp2$row)
mat2 # Rarely used