SYNTOLOGY HomeExplorerAtlasCodeMethodologyAboutDevelopersFeedPricing
Paper · 2606.18834 · 2026

Identifying Structural Biases from Causal Mechanism Shifts

Jilles Vreeken, Praharsh Nanavati, David Kaltenpoth

arXiv · PDF · Open in the Atlas

Code that ran

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.

RepositoryRoleRan
niftynans/strubi canonical 12 of 14
FunctionStatusWhere 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")

Repositories linked to this paper

Some links come from the archived Papers with Code dataset (CC BY-SA 4.0): attribution and licence.

Abstract

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.

For agents

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.