Learn R Programming

SEset (version 1.0.1)

network_to_SEset: SE-set from precision matrix

Description

Takes a precision matrix and generates the SE-set, a set of statistically equivalent path models. Unless otherwise specified, the SEset will contain one weights matrix for every possible topological ordering of the input precision matrix

Usage

network_to_SEset(
  omega,
  orderings = NULL,
  digits = 20,
  rm_duplicates = FALSE,
  input_type = "precision"
)

Arguments

omega

input \(p \times p\) precision matrix

orderings

An optional matrix of \(n\) orderings from which to generate the SE-set. Must be in the form of a \(p \times n\) matrix with each column a vector of dimension names in the desired order. If unspecified, all \(p!\) possible orderings are used

digits

desired rounding of the output weights matrices in the SE-set, in decimal places. Defaults to 20.

rm_duplicates

Logical indicating whether only unique DAGs should be returned

input_type

specifies what type of matrix `omega` is. default is "precision", other options include a matrix of partial correlations ("parcor") or a model implied covariance or correlation matrix "MIcov"

Value

a \(p! \times p\) matrix containing the SE-set (or \(n \times p\) matrix if a custom set of \(n\) orderings is specified). Each row represents a lower-triangular weights matrix, stacked column-wise.

References

ryan2019SEset

shojaie2010penalizedSEset

bollen89semSEset

See Also

network_to_path, reorder_mat, order_gen

Examples

Run this code
# NOT RUN {
# first estimate the precision matrix
data(riskcor)
omega <- (qgraph::EBICglasso(riskcor, n = 69, returnAllResults = TRUE))$optwi
# qgraph method estimates a non-symmetric omega matrix, but uses forceSymmetric to create
# a symmetric matrix (see qgraph:::EBICglassoCore line 65)
omega <- as.matrix(Matrix::forceSymmetric(omega)) # returns the precision matrix

SE <- network_to_SEset(omega, digits=3)

# each row of SE defines a path-model weights matrix.
# We can extract element 20 by writing it to a matrix
example <- matrix(SE[20,],6,6)

# Example path model can be plotted as a weighted DAG
pos <- matrix(c(2,0,-2,-1,-2,1,0,2,0.5,0,0,-2),6,2,byrow=TRUE)

# qgraph reads matrix elements as "from row to column"
# regression weights matrices are read "from column to row"
# path model weights matrix must be transposed for qgraph

qgraph::qgraph(t(example), labels=rownames(riskcor), layout=pos,
repulsion=.8, vsize=c(10,15), theme="colorblind", fade=FALSE)
# }

Run the code above in your browser using DataLab