Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update index.md #169

Merged
merged 1 commit into from
Feb 16, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,17 @@ Causal inference is by no means an easy subject. Readers without any prior expos

There are also tutorials and examples linked in the navigation bar of this package.

## Implementation Details
See the [Library](https://mschauer.github.io/CausalInference.jl/latest/library/) for implemented functionality.

The PC algorithm was tested on random DAGs by comparing the result of the PC algorithm using the *d*-separation oracle with the CPDAG computed with Chickering's DAG->CPDAG conversion algorithm (implemented as [`dsep`](@ref) and [`cpdag`](@ref) in this package).

See the [Library](https://mschauer.github.io/CausalInference.jl/latest/library/) for other implemented functionality.
## Performance and Implementation Details

The package uses the very efficient [Graphs.jl](https://github.com/JuliaGraphs/Graphs.jl) package internally.
The speed of the PC and GES algorithm is comparable with the C++ code of the R package `pcalg`. The exact score-based algorithm scales to 20-25 variables on consumer hardware, which comes close to the theoretical limits of these approaches.
A couple of packages provide high-performance implementatiosn of algorithms or provide performance relevant infrastructure:
[CliqueTrees.jl](https://github.com/AlgebraicJulia/CliqueTrees.jl), [NearestNeighbors.jl](https://github.com/KristofferC/NearestNeighbors.jl) [Memoization.jl](https://github.com/marius311/Memoization.jl), [PrecompileTools.jl](https://github.com/JuliaLang/PrecompileTools.jl), [ThreadsX.jl](https://github.com/tkf/ThreadsX.jl).

The PC algorithm was tested on random DAGs by comparing the result of the PC algorithm using the *d*-separation oracle with the CPDAG computed with Chickering's DAG->CPDAG conversion algorithm (implemented as [`dsep`](@ref) and [`cpdag`](@ref) in this package).

The algorithms use the `SimpleGraph` and `SimpleDiGraph` graph representation of the Julia package [Graphs](https://github.com/JuliaGraphs/Graphs.jl).
Both types of graphs are represented by sorted adjacency lists (vectors of vectors in the Graphs implementation).
Expand All @@ -27,9 +33,6 @@ CPDAGs are just modeled as `SimpleDiGraph`s, where unoriented edges are represen

The listing algorithms for adjustment sets are implemented from scratch using an memority efficient iterator protocol to handle large problems.

## Performance
The speed of the PC and GES algorithm is comparable with the C++ code of the R package `pcalg`. The exact score-based algorithm scales to 20-25 variables on consumer hardware, which comes close to the theoretical limits of these approaches.

## Plotting
Main package provides a text-based output describing all identified edges for PC and FCI algorithm ([`plot_pc_graph_text`](@ref) and [`plot_fci_graph_text`](@ref), respectively).

Expand Down
Loading