diff --git a/docs/src/index.md b/docs/src/index.md index e1d6954..da19164 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -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). @@ -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).