Baseline algorithms and analytics tools for Causal Discovery.

# CausalDisco 🪩

CausalDisco contains baseline algorithms and analytics tools for Causal Discovery. The package can be installed by running pip install CausalDisco. Additional information can be found in the documentation.

### Baseline Algorithms

Find the following baseline algorithms in CausalDisco/baselines.py

• R²-SortnRegress
• Var-SortnRegress
• Random-SortnRegress

### Analytics Tools

Find the following analytics tools in CausalDisco/analytics.py

• R²-sortability
• Var-sortability
• order_alignment

### Sources

If you find our algorithms useful please consider citing

@article{reisach2021beware,
title={Beware of the Simulated DAG! Causal Discovery Benchmarks May Be Easy to Game},
author={Reisach, Alexander G. and Seiler, Christof and Weichwald, Sebastian},
journal={Advances in Neural Information Processing Systems},
volume={34},
year={2021}
}

@article{reisach2023simple,
title={Simple Sorting Criteria Help Find the Causal Order in Additive Noise Models},
author={Reisach, Alexander G. and Tami, Myriam and Seiler, Christof and Chambaz, Antoine and Weichwald, Sebastian},
journal={arXiv preprint arXiv:2303.18211},
year={2023}
}


### A Simple Example

# --- sample data from a linear SCM:

import numpy as np
from scipy import linalg
from CausalDisco.analytics import var_sortability, r2_sortability

d = 10
W = np.diag(np.ones(d-1), 1)
X = np.random.randn(10000, d).dot(linalg.inv(np.eye(d) - W))
X_std = (X - np.mean(X, axis=0))/np.std(X, axis=0)

# --- run analytics and print results:

from CausalDisco.analytics import (
var_sortability,
r2_sortability,
snr_sortability
)

print(
f'True\n{W}\n'
f'var-sortability={var_sortability(X, W):.2f}\n'
f'R^2-sortability={r2_sortability(X, W):.2f}\n'
f'SNR-sortability={snr_sortability(X, W):.2f}'
)

# --- run baselines and print results:

from CausalDisco.baselines import (
random_sort_regress,
var_sort_regress,
r2_sort_regress
)

print(
f'True\n{W}\n'
'--- randomRegress ---\n'
f'Recovered:\n{1.0*(random_sort_regress(X)!=0)}\n'
f'Recovered standardized:\n{1.0*(random_sort_regress(X_std)!=0)}\n'
'--- varSortnRegress ---\n'
f'Recovered:\n{1.0*(var_sort_regress(X)!=0)}\n'
f'Recovered standardized:\n{1.0*(var_sort_regress(X_std)!=0)}\n'
'--- r2SortnRegress ---\n'
f'Recovered:\n{1.0*(r2_sort_regress(X)!=0)}\n'
f'Recovered standardized:\n{1.0*(r2_sort_regress(X_std)!=0)}\n'
)


## Release history Release notifications | RSS feed

Uploaded Source
Uploaded Python 2 Python 3