graph-mcs.Rd
Returns (if it exists) a perfect ordering of the vertices in an undirected graph.
mcs(object, root = NULL, index = FALSE)
# Default S3 method
mcs(object, root = NULL, index = FALSE)
mcsMAT(amat, vn = colnames(amat), root = NULL, index = FALSE)
mcs_marked(object, discrete = NULL, index = FALSE)
# Default S3 method
mcs_marked(object, discrete = NULL, index = FALSE)
mcs_markedMAT(amat, vn = colnames(amat), discrete = NULL, index = FALSE)
An undirected graph represented either as a
graphNEL
object, an igraph
, a (dense)
matrix
, a (sparse) dgCMatrix
.
A vector of variables. The first variable in the perfect ordering will be the first variable on 'root'. The ordering of the variables given in 'root' will be followed as far as possible.
If TRUE, then a permutation is returned
Adjacency matrix
Nodes in the graph given by adjacency matrix
A vector indicating which of the nodes are discrete. See 'details' for more information.
A vector with a linear ordering (obtained by maximum cardinality search) of the variables or character(0) if such an ordering can not be created.
An undirected graph is decomposable iff there exists a
perfect ordering of the vertices. The maximum cardinality
search algorithm returns a perfect ordering of the vertices if
it exists and hence this algorithm provides a check for
decomposability. The mcs()
functions finds such an
ordering if it exists.
The notion of strong decomposability is used in connection with
e.g. mixed interaction models where some vertices represent
discrete variables and some represent continuous
variables. Such graphs are said to be marked. The
\code{mcsmarked()} function will return a perfect ordering iff
the graph is strongly decomposable. As graphs do not know about
whether vertices represent discrete or continuous variables,
this information is supplied in the \code{discrete} argument.
The workhorse is the mcsMAT
function.
moralize
, junction_tree
,
rip
, ug
, dag
uG <- ug(~ me:ve + me:al + ve:al + al:an + al:st + an:st)
mcs(uG)
#> [1] "me" "ve" "al" "an" "st"
mcsMAT(as(uG, "matrix"))
#> [1] "me" "ve" "al" "an" "st"
## Same as
uG <- ug(~ me:ve + me:al + ve:al + al:an + al:st + an:st, result="matrix")
mcsMAT(uG)
#> [1] "me" "ve" "al" "an" "st"
## Marked graphs
uG1 <- ug(~ a:b + b:c + c:d)
uG2 <- ug(~ a:b + a:d + c:d)
## Not strongly decomposable:
mcs_marked(uG1, discrete=c("a","d"))
#> 'as(<ddiMatrix>, "dgCMatrix")' is deprecated.
#> Use 'as(as(., "generalMatrix"), "CsparseMatrix")' instead.
#> See help("Deprecated") and help("Matrix-deprecated").
#> character(0)
## Strongly decomposable:
mcs_marked(uG2, discrete=c("a","d"))
#> [1] "a" "d" "b" "c"