Find the equivalence class and the v-structures of a Bayesian network, construct its moral graph, or create a consistent extension of an equivalent class.
cpdag(x, moral = FALSE, wlbl = FALSE, debug = FALSE)
cextend(x, strict = TRUE, debug = FALSE)
moral(x, debug = FALSE)colliders(x, arcs = FALSE, debug = FALSE)
shielded.colliders(x, arcs = FALSE, debug = FALSE)
unshielded.colliders(x, arcs = FALSE, debug = FALSE)
vstructs(x, arcs = FALSE, moral = FALSE, debug = FALSE)
an object of class bn or bn.fit (with the exception of
    cextend, which only accepts objects of class bn).
a boolean value. If TRUE the arcs that are part of at least
    one v-structure are returned instead of the v-structures themselves.
a boolean value. If FALSE we define a v-structure as in
    Pearl (2000); if TRUE, as in Koller and Friedman (2009). See below.
a boolean value. If TRUE arcs whose directions have been
    fixed by a whitelist or a by blacklist are preserved when constructing
    the CPDAG.
a boolean value. If no consistent extension is possible and
    strict is TRUE, an error is generated; otherwise a partially
    extended graph is returned with a warning.
a boolean value. If TRUE a lot of debugging output is
    printed; otherwise the function is completely silent.
cpdag() returns an object of class bn, representing the
  equivalence class. moral on the other hand returns the moral graph.
  See bn-class for details.
cextend() returns an object of class bn, representing a DAG that
  is the consistent extension of x.
vstructs() returns a matrix with either 2 or 3 columns, according to the
  value of the arcs argument.
What kind of arc configuration is called a v-structure is not uniquely defined in literature. The original definition from Pearl (2000), which is still followed by most texts and papers, states that the two parents in the v-structure must not be connected by an arc. However, Koller and Friedman (2009) call that a immoral v-structure and call a moral v-structure a v-structure in which the parents are linked by an arc. This mirrors the unshielded versus shielded collider naming convention, but it is confusing.
Setting moral to TRUE in cpdag() and vstructs()
  makes those functions follow the definition from Koller and Friedman (2009);
  the default value of FALSE, on the other hand, makes those functions
  follow the definition from Pearl (2000). The former call v-structures
  both shielded and unshielded colliders (respectively moral v-structures
  and immoral v-structures); the latter requires v-structures to be
  unshielded colliders. Hence, the moral argument controls whether moral
  v-structures (shielded colliders) are returned along with immoral v-structures
  (unshielded collides).
Note that arcs whose directions are dictated by the parametric assumptions of
  conditional linear Gaussian networks are preserved as directed arcs in
  cpdag().
Dor D (1992). A Simple Algorithm to Construct a Consistent Extension of a Partially Oriented Graph. UCLA, Cognitive Systems Laboratory.
Koller D, Friedman N (2009). Probabilistic Graphical Models: Principles and Techniques. MIT Press.
Pearl J (2009). Causality: Models, Reasoning and Inference. Cambridge University Press, 2nd edition.
# NOT RUN {
data(learning.test)
res = gs(learning.test)
cpdag(res)
vstructs(res)
# }
Run the code above in your browser using DataLab