Skip to contents

caugi 1.0.0

CRAN release: 2026-01-22

New Features

  • Add support for Ancestral Graphs (AGs), which combine directed (-->), bidirected (<->), and undirected (---) edges while satisfying ancestral graph constraints. New functions: is_ag(), is_mag().
  • Add mode argument to neighbors()/neighbours() to filter neighbors by edge direction or type ("all", "in", "out", "undirected", "bidirected", "partial"). This is a structural query, and not a semantic query!
  • neighbors() now supports class = "UNKNOWN" graphs, including mode-based filtering.
  • Add simulate_data() that enables simulation from DAGs using SEMs. Standard linear Gaussian SEMs are defaults, but more importantly custom SEMs are available.
  • Add "AUTO" parameter for class in caugi objects. This automatically picks the graph class in order DAG, UG, PDAG, ADMG, AG.
  • Add Ancestral Graphs (AG) with support for directed, bidirected, and undirected edges, plus new queries is_ag() and is_mag() and m-separation for AGs.
  • Add exogenize() function that exogenizes variables for any graph type. Current implementation is written in R, but it is so simple that it might be preferable over a Rust implementation. This might be changed later.
  • Add latent_project() function that does latent projection from DAGs to ADMGs.
  • Add native caugi serialization format for saving and loading graphs. New functions: write_caugi(), read_caugi(), caugi_serialize(), and caugi_deserialize(). The format is a versioned JSON schema that captures graph structure, class, and optional metadata (comments and tags).
  • Add plot() method for visualizing graphs using various layout algorithms. The plot is rendered using grid graphics and returns a caugi_plot object that can be customized with node_style, edge_style, and label_style arguments. The plot() method accepts layouts as strings, functions, or pre-computed data.frames.
  • Add caugi_layout() function to compute node coordinates for graph visualization.
  • Add dedicated layout functions: caugi_layout_sugiyama(), caugi_layout_fruchterman_reingold(), caugi_layout_kamada_kawai(), caugi_layout_bipartite(), and caugi_layout_tiered(). Each function provides an API for its specific algorithm.
  • Add to_dot() and write_dot() functions for exporting caugi graphs to DOT (graphviz) format. The resulting object is a new S7 class, caugi_export, which has a knit_print() method for rendering DOT graphs in R Markdown and Quarto documents.
  • Add GraphML and Mermaid import/export support: to_graphml, write_graphml, read_graphml, to_mermaid, write_mermaid, and read_mermaid
  • Add plot composition operators for creating multi-plot layouts: + and | for horizontal arrangement, / for vertical stacking. Compositions can be nested arbitrarily (e.g., (p1 + p2) / p3).
  • Add caugi_options() function for setting global defaults for plot appearance, including composition spacing and default styles for nodes, edges, labels, and titles.
  • Add caugi_default_options() function to query or reset to package default options.
  • Add a new vignette, “Graph Visualization with caugi”, demonstrating the new plotting capabilities and customization options.

Improvements

  • Add favicons for the package website.
  • Standardize is_caugi() validation calls internally.
  • Adopt air as the R code formatter for the package.
  • caugi_layout_tiered() now returns a tier column and orientation attribute in the layout data.frame, allowing plot() to automatically use tier information without requiring the tiers argument to be passed again.

Bug Fixes

  • Fix typo in error messages and documentation examples.
  • Remove unused index_name_map parameter from internal .cg_state() function.
  • Fix interpretation of directed edge endpoint positions in the Rust backend, improving correctness of direction-dependent algorithms/metrics (e.g. topological sorting and structural Hamming distance computations).
  • Fix bug in is_cpdag function that returns TRUE on non-complete PDAGs.
  • Fix bug in shd returning positive values for equivalent graphs given in shuffled order.

caugi 0.4.0

  • Add support for Acyclic Directed Mixed Graphs (ADMGs), which combine directed edges representing causal relationships with bidirected edges representing latent confounding.
  • Add new functions for querying ADMGs: is_admg(), spouses(), districts(), and m_separated() (generalization of d-separation for graphs with bidirected edges).
  • Add functions for adjustment set validation in ADMGs: is_valid_adjustment_admg() and all_adjustment_sets_admg() implementing the Generalized Adjustment Criterion.
  • Add mutate_caugi() function that allows conversion from one graph type to another.
  • Add custom printing method for caugi objects.
  • Add optional edges_df argument to caugi() for easier construction from existing data frames containing the columns from, edge, and to.
  • Improve error handling across all graph types (DAG, PDAG, UG, ADMG) with more descriptive error messages.
  • Update as_adjacency() and as_igraph() to support bidirected edges.
  • Update as_caugi() documentation to include “ADMG” as a valid class type for conversion.

caugi 0.3.2

  • Change website to caugi.org/.
  • Minor modifications to CONTRIBUTING.md.
  • Minor README rewrite.

caugi 0.3.1

CRAN release: 2025-12-04

  • Remove the use of lockBinding and unlockBinding in the package to silence R CMD check notes.

caugi 0.3.0

  • Add mutate_caugi function that allows conversion from one graph type to another.
  • Add custom printing method.
  • Add optional edges_df argument to caugi for easier construction from existing data frames containing the columns from, edge, and to.
  • Update How to use caugi in a package vignette to use new conversion functionality.
  • Add CONTRIBUTING.md to github.

caugi 0.2.1

  • Update function documentation to make package CRAN ready.
  • Update performance vignette and change it to article.
  • Add Michael Sachs and Johan Larsson to Authors in DESCRIPTION.
  • Patch S4 class reading for as_caugi.

caugi 0.2.0

  • Drop dependencies on dplyr and tibble.
  • Improve performance by letting all data wrangling be done by data.table.
  • Edges and nodes are now data.tables.

caugi 0.1.0

  • Add Undirected Graphs (UG) to caugi.
  • Refactor Rust backend for DAGs.
  • Add NEWS.md!