Jilles Vreeken, Praharsh Nanavati, David Kaltenpoth
We lifted 14 functions out of this paper's own repositories and ran 12 of them in a sandbox. "Ran" means the function executed on a synthesized input and returned a value. It is not a reproduction of the paper's results.
| Repository | Role | Ran |
|---|---|---|
| niftynans/strubi | canonical | 12 of 14 |
| Function | Status | Where it lives |
|---|---|---|
| apply_func | Ran | niftynans/strubi/multivariate/mv_dgp_v4.py pointer only (licence: NONE) · get_code("61729e5be26394e6") |
| calculate_sachs_union_coverage | Ran | niftynans/strubi/multivariate/joint_cov.py pointer only (licence: NONE) · get_code("5d13341412eb3bf3") |
| extract_nodes | Ran | niftynans/strubi/multivariate/process_ablations_full.py pointer only (licence: NONE) · get_code("27ce5570e4303115") |
| gen_exclusive_maps | Ran | niftynans/strubi/multivariate/mv_dgp_v4.py pointer only (licence: NONE) · get_code("eb8cf9b8c3c7a9b7") |
| gen_exclusive_maps_old | Ran | niftynans/strubi/multivariate/mv_dgp_v4.py pointer only (licence: NONE) · get_code("cf38b84bdb2dcd50") |
| get_expected_set | Ran | niftynans/strubi/multivariate/ablation.py pointer only (licence: NONE) · get_code("cce20350574e497c") |
| get_mdl_gain | Ran | niftynans/strubi/multivariate/info.py pointer only (licence: NONE) · get_code("d5f6cba16e58666d") |
| get_oracle_partitions | Ran | niftynans/strubi/multivariate/synthetic_workflow.py pointer only (licence: NONE) · get_code("15f5b6353fa0d0ff") |
| get_spectral_subsets | Ran | niftynans/strubi/multivariate/info.py pointer only (licence: NONE) · get_code("bf8bc4b7e328d3c8") |
| multinomial_mdl | Ran | niftynans/strubi/multivariate/info.py pointer only (licence: NONE) · get_code("af234c9eb95a6ce7") |
| perturb_graph | Ran | niftynans/strubi/multivariate/synthetic_workflow.py pointer only (licence: NONE) · get_code("60e5906830a5125c") |
| repeat_experiment | Ran | niftynans/strubi/topic/src/quickexp.py pointer only (licence: NONE) · get_code("2d5931c0f99c59c1") |
| clean_to_set | Not yet run | niftynans/strubi/multivariate/process_ablations_full.py pointer only (licence: NONE) · get_code("ce35dda363df1a3c") |
| optimize_and_update_predictions | Not yet run | niftynans/strubi/multivariate/process_ablations_full.py pointer only (licence: NONE) · get_code("4f37ee8c0b3c4934") |
Some links come from the archived Papers with Code dataset (CC BY-SA 4.0): attribution and licence.
Causal discovery methods commonly assume that all data is independently and identically distributed (i.i.d.) and that there are no unmeasured variables affecting the system. In practice, these assumptions are often violated, leading to inaccurate inference. In this paper, we study how to identify hidden confounding and selection biases from causal mechanism shifts. In particular, we show that structural biases lead to dependent mechanism shifts. That is, by considering for which variables the mechanisms change given data from different environments, we can tell which variables are unbiased, which are subject to hidden confounding, and which are undergoing selection bias. We formalize this into an empirically testable criterion based on mutual information, and show under which conditions it identifies structural biases. To tell which nodes are subject to what kind of bias, we introduce the STRUBI algorithm. Experiments on synthetic and real-world data show that STRUBI works well in practice, accurately recovering affected variable sets and types of biases, outperforming the state-of-the-art by a wide margin. Our implementation is available at https://github.com/niftynans/strubi.
The same record, over MCP at https://syntology.ai/mcp:
get_harvested_code_for_paper("2606.18834")
get_code_for_paper("2606.18834")
have("2606.18834")
Connect an agent — have() is free.