Added support for the RFCI algorithm via rfci(), interfacing with
implementations from pcalg and Tetrad.
The infix edge operators %-->% and %!-->% in knowledge() now accept +
on both sides to specify multiple variables, e.g. A + B %-->% C + D is
equivalent to c(A, B) %-->% c(C, D).
The infix edge operators %-->% and %!-->% in knowledge() now support
tidyselect set operations such as !, &, and | on either side, e.g.
child_x1 %!-->% !starts_with("child").
You can now plug a fully custom, user-written search algorithm into the
causalDisco engine and run it through disco() (via
CausalDiscoSearch$set_alg() and make_method()). See the "Extending
causalDisco with new algorithms" article for a worked example.
Added register_engine(), which lets you plug in an entirely new engine
backend (i.e. one not built on bnlearn, causalDisco, pcalg, or Tetrad) so. See
the "Extending causalDisco with new algorithms" article for a worked example.
The summary() methods for Knowledge and Disco objects are deprecated;
use print() instead.
The directed_as_undirected argument of tpc_run(), tfci_run(), and
CausalDiscoSearch$set_knowledge() is deprecated and ignored; see the related
bug-fix entry below for the new handling of directed forbidden edges.
The internal-only directed_as_undirected_knowledge argument of
make_runner() has been removed, and the directed_as_undirected argument of
PcalgSearch$set_knowledge() and as_pcalg_constraints() is deprecated and
ignored.
as_pcalg_constraints() no longer returns a fixed_edges matrix. pcalg's
fixedEdges argument only protects an undirected adjacency in the skeleton,
so a directed required edge (A %-->% B) cannot be honored through it.
Fixed tpc() and tfci() silently treating directed forbidden edges as
undirected: forbidding i %!-->% j also forbidden j !--> i. Forbidden edges
now follow the same rule as the pcalg engine: both directions must be supplied
explicitly, otherwise an error is raised. The exception is if the Knowledge
forbidden knowledge is equivalent to tiered knowledge.
Fixed knowledge() dropping variables from tier() formulas when infix edge
operators (%-->%, %!-->%) appeared before the tier() call and had
already registered some (but not all) of the tier's variables. This only
affected the no-data-frame form of knowledge().
The print() methods for Knowledge and Disco objects now give a more
concise and readable summary.
Disco objects now store an attribute graph_class of the actual learned
graph class.
Knowledge objects generated from knowledge() now verifies the knowledge
for requires edges doesn't contain a directed cycle.
Improved the documentation.
Reduced the number of package dependencies.
Exports list_registered_tetrad_algorithms() to view the custom registered
Tetrad algorithms.
Allows the user to specify custom conditional independence tests for use with
the engines bnlearn, causalDisco, and pcalg. The custom test should have the
signature function(x, y, conditioning_set, suff_stat) (optionally with an
additional args argument for additional parameters), and return a p-value.
See the documentation and the associated vignette for details.
Added support for micd tests such as micd::gaussCItestMI() for pcalg and
causalDisco engine. See all the new available tests in ?PcalgSearch and
?CausalDiscoSearch under the test field.
Simplified the interface for extending causalDisco with new algorithms.
Exports make_method() and make_runner() to do this. Please see the
documentation and the associated vignette for details.
Improved speed of tfci(), tges(), and tpc() algorithms by at least 3x,
and often much more.
Updated knowledge_to_caugi() to include information about required and
forbidden edges in the output.
Improve documentation for many functions.
This release should be considered essentially a new package with many new features, and some breaking changes (mainly renaming functions, arguments, and object classes) to be consistent.
Please see the vignettes and documentation for details on using the new features.