{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/sample-estimate-aggregate-a-recipe-for-causal","title":"Sample, estimate, aggregate: A recipe for causal discovery foundation models","arxiv_id":"2402.01929","date":"2024-02-02","proceeding":null,"authors":["Menghua Wu","Yujia Bao","Regina Barzilay","Tommi Jaakkola"],"abstract":"Causal discovery, the task of inferring causal structure from data, has the potential to uncover mechanistic insights from biological experiments, especially those involving perturbations. However, causal discovery algorithms over larger sets of variables tend to be brittle against misspecification or when data are limited. For example, single-cell transcriptomics measures thousands of genes, but the nature of their relationships is not known, and there may be as few as tens of cells per intervention setting. To mitigate these challenges, we propose a foundation model-inspired approach: a supervised model trained on large-scale, synthetic data to predict causal graphs from summary statistics -- like the outputs of classical causal discovery algorithms run over subsets of variables and other statistical hints like inverse covariance. Our approach is enabled by the observation that typical errors in the outputs of a discovery algorithm remain comparable across datasets. Theoretically, we show that the model architecture is well-specified, in the sense that it can recover a causal graph consistent with graphs over subsets. Empirically, we train the model to be robust to misspecification and distribution shift using diverse datasets. Experiments on biological and synthetic data confirm that this model generalizes well beyond its training set, runs on graphs with hundreds of variables in seconds, and can be easily adapted to different underlying data assumptions.","url_abs":"https://arxiv.org/abs/2402.01929v3","url_pdf":"https://arxiv.org/pdf/2402.01929v3.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"sample-estimate-aggregate-a-recipe-for-causal","repo_url":"https://github.com/rmwu/sea","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"causal-discovery","task_name":"Causal Discovery"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2402.01929","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2402.01929"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/rmwu/sea","reach":{"status":"ok"}}],"summary":{"ran":12,"unverified":4},"by_repo_kind":{"official":{"samples":16,"ran":12,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":16,"samples":[{"code_sha256_prefix":"89d20c69f3c6527d","entry":"adj","repo":"rmwu/sea","repo_kind":"official","path":"src/ges/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/ges/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"89d20c69f3c6527d"}},{"code_sha256_prefix":"a367036b61699c66","entry":"get_mask","repo":"rmwu/sea","repo_kind":"official","path":"src/model/baseline.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/model/baseline.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"a367036b61699c66"}},{"code_sha256_prefix":"53c768f1526a2e2c","entry":"get_params_groups","repo":"rmwu/sea","repo_kind":"official","path":"src/model/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/model/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"53c768f1526a2e2c"}},{"code_sha256_prefix":"56ee495500ae3e00","entry":"get_suffix","repo":"rmwu/sea","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"56ee495500ae3e00"}},{"code_sha256_prefix":"219a7efaf7fb487c","entry":"na","repo":"rmwu/sea","repo_kind":"official","path":"src/ges/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/ges/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"219a7efaf7fb487c"}},{"code_sha256_prefix":"9b79ca71eafd0891","entry":"neighbors","repo":"rmwu/sea","repo_kind":"official","path":"src/ges/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/ges/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9b79ca71eafd0891"}},{"code_sha256_prefix":"b3d4fdc848c17859","entry":"override_args","repo":"rmwu/sea","repo_kind":"official","path":"src/args.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/args.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b3d4fdc848c17859"}},{"code_sha256_prefix":"74b6c24a736de396","entry":"precision_recall","repo":"rmwu/sea","repo_kind":"official","path":"src/cdt/metrics.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/cdt/metrics.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"74b6c24a736de396"}},{"code_sha256_prefix":"c59f9272b2e9178c","entry":"read_csv","repo":"rmwu/sea","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c59f9272b2e9178c"}},{"code_sha256_prefix":"621ec17cc6678229","entry":"read_pickle","repo":"rmwu/sea","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/utils.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"621ec17cc6678229"}},{"code_sha256_prefix":"91007bd87b2f9f18","entry":"retrieve_adjacency_matrix","repo":"rmwu/sea","repo_kind":"official","path":"src/cdt/metrics.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/cdt/metrics.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"91007bd87b2f9f18"}},{"code_sha256_prefix":"71a5a3022973fb47","entry":"shd_metric","repo":"rmwu/sea","repo_kind":"official","path":"src/model/utils.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/model/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"71a5a3022973fb47"}},{"code_sha256_prefix":"9b483f9d2de5ac74","entry":"exp_fit_bic","repo":"rmwu/sea","repo_kind":"official","path":"src/gies/scratch.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/gies/scratch.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"9b483f9d2de5ac74"}},{"code_sha256_prefix":"4f41006b7caf1dfc","entry":"get_CPDAG","repo":"rmwu/sea","repo_kind":"official","path":"src/cdt/metrics.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/cdt/metrics.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"4f41006b7caf1dfc"}},{"code_sha256_prefix":"d96988e33b80fd0e","entry":"get_model_cls","repo":"rmwu/sea","repo_kind":"official","path":"src/model/factory.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/model/factory.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d96988e33b80fd0e"}},{"code_sha256_prefix":"599cc4499ffcf6d0","entry":"load_model","repo":"rmwu/sea","repo_kind":"official","path":"src/model/factory.py","file_url":"https://github.com/rmwu/sea/blob/HEAD/src/model/factory.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"599cc4499ffcf6d0"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}