In this vignette, we compare caugi to some of the most
widely used graph packages in R, Python, and Java.
Overview
The following table summarizes the packages included in this
comparison, their general focus, and the languages they are packaged
for.
Scope
The comparison focuses on graph representation and
analysis: which graph classes each package can represent, which
structural and causal-graph algorithms it implements, and how it
interoperates with other tooling.
Two adjacent areas are intentionally out of scope:
-
Causal discovery (PC, FCI, GES, GFCI, LiNGAM,
etc.).
caugi does not implement discovery algorithms.
-
Statistical inference and parameter learning (CPT
estimation, likelihood, parameter fitting): also out of scope for
caugi.
Graph Types Supported
Supported graph types for the packages in this comparison.
● indicates a dedicated class with type-level invariants;
◐ indicates representability without a dedicated class or
invariant enforcement; ○ indicates unsupported graph
types.
| caugi |
● |
●
|
● |
◐
|
○ |
● |
○ |
● |
● |
| igraph |
◐
|
○
|
○ |
○ |
○ |
○ |
○ |
◐
|
◐
|
| graph |
◐
|
○ |
○ |
○ |
○ |
○ |
○ |
◐
|
◐
|
| gRbase |
◐
|
○ |
○ |
○ |
○ |
○ |
○ |
◐
|
○ |
| pcalg |
◐
|
◐
|
◐
|
◐
|
◐
|
○ |
○ |
○ |
○ |
| dagitty |
● |
◐
|
○ |
● |
● |
○ |
○ |
○ |
○ |
| bnlearn |
● |
◐
|
○ |
○ |
○ |
○ |
○ |
◐
|
◐
|
| ggm |
◐
|
◐
|
○ |
◐
|
○ |
◐
|
○ |
◐
|
◐
|
| MixedGraphs |
◐
|
○ |
○ |
○ |
○ |
◐
|
○ |
● |
● |
| NetworkX |
◐
|
○ |
○ |
○ |
○ |
○ |
○ |
◐
|
◐
|
| pgmpy |
● |
◐
|
○
|
● |
○ |
● |
○ |
● |
○
|
| Tetrad |
● |
◐
|
◐
|
◐
|
●
|
◐
|
○ |
◐
|
◐
|
Graph Queries and Structural Operations
Overview of available graph queries and structural operations
in the packages in the comparison.
| caugi |
● |
● |
● |
● |
○ |
● |
● |
● |
● |
○ |
○ |
| igraph |
◐
|
◐
|
○ |
○ |
● |
● |
○ |
○ |
○ |
○ |
○ |
| graph |
◐
|
◐
|
○ |
○ |
◐
|
○ |
○ |
○ |
○ |
○ |
○ |
| gRbase |
◐
|
◐
|
○ |
○ |
○ |
● |
○ |
● |
○ |
○ |
○ |
| pcalg |
◐
|
◐
|
◐
|
◐
|
○ |
◐
|
○ |
○ |
◐
|
◐
|
● |
| dagitty |
● |
● |
● |
○ |
● |
● |
● |
● |
○ |
◐
|
● |
| bnlearn |
● |
● |
◐
|
○ |
● |
● |
● |
● |
● |
● |
● |
| ggm |
◐
|
◐
|
● |
● |
◐
|
● |
○ |
○ |
○ |
○ |
◐
|
| MixedGraphs |
● |
● |
○ |
● |
○ |
◐
|
◐
|
● |
● |
○ |
○ |
| NetworkX |
◐
|
● |
◐
|
○ |
● |
● |
○ |
● |
◐
|
● |
○ |
| pgmpy |
● |
◐
|
● |
● |
○ |
● |
● |
● |
○
|
● |
○ |
| Tetrad |
● |
● |
◐
|
● |
● |
◐
|
● |
○ |
◐
|
◐
|
● |
Causal-Inference Algorithms
Overview of available causal-inference algorithms in the
packages in the comparison.
| caugi |
● |
● |
◐
|
○ |
○ |
○ |
○ |
| igraph |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
| graph |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
| gRbase |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
| pcalg |
◐
|
● |
● |
○ |
○ |
○ |
◐
|
| dagitty |
◐
|
○ |
○ |
○ |
○ |
○ |
◐
|
| bnlearn |
○ |
○ |
○ |
○ |
○ |
● |
● |
| ggm |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
| MixedGraphs |
○ |
○ |
○ |
○ |
○ |
○ |
◐
|
| NetworkX |
○ |
○ |
○ |
○ |
○ |
○ |
○ |
| pgmpy |
● |
● |
○ |
○ |
○ |
○ |
● |
| Tetrad |
◐
|
● |
◐
|
○ |
○ |
○ |
○ |
I/O and Interoperability
Comparison of supported graph I/O formats and interoperability
features.
| caugi |
◐
|
● |
● |
●
|
● |
| igraph |
◐
|
○ |
● |
○ |
◐
|
| graph |
◐
|
○ |
○ |
○ |
◐
|
| gRbase |
○ |
○ |
○ |
○ |
◐
|
| pcalg |
○ |
○ |
○ |
○ |
◐
|
| dagitty |
○ |
○ |
○ |
○ |
◐
|
| bnlearn |
◐
|
○ |
○ |
○ |
● |
| ggm |
○ |
○ |
○ |
○ |
◐
|
| MixedGraphs |
○ |
○ |
○ |
○ |
● |
| NetworkX |
◐
|
○ |
● |
● |
◐
|
| pgmpy |
◐
|
○ |
○ |
○ |
◐
|
| Tetrad |
◐
|
○ |
○ |
● |
○ |
Implementation and Ergonomics
Comparison of implementation details and ergonomic features of
the packages in the comparison.
| caugi |
R + Rust |
● |
● |
● |
● |
● |
| igraph |
C |
◐
|
● |
● |
○ |
○ |
| graph |
R + C |
●
|
○
|
○ |
○ |
○ |
| gRbase |
R + C++ |
● |
◐
|
○ |
○ |
○ |
| pcalg |
R + C++ |
○ |
◐
|
○ |
○ |
○ |
| dagitty |
R + JS |
○ |
● |
◐
|
○ |
○ |
| bnlearn |
R + C |
◐
|
◐
|
◐
|
○ |
○ |
| ggm |
R |
○ |
● |
◐
|
○ |
○ |
| MixedGraphs |
R + C++ |
◐
|
◐
|
○ |
◐
|
○ |
| NetworkX |
Python |
◐
|
◐
|
● |
○ |
○ |
| pgmpy |
Python (NetworkX) |
○ |
◐
|
◐
|
○ |
○ |
| Tetrad |
Java |
● |
◐
|
● |
○ |
○ |
Contributing
If you find any errors in the comparison above or would like to add
another package for comparisons, please file an issue or submit a pull
request with the relevant information.