{"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/tangent-space-causal-inference-leveraging","title":"Tangent Space Causal Inference: Leveraging Vector Fields for Causal Discovery in Dynamical Systems","arxiv_id":"2410.23499","date":"2024-10-30","proceeding":null,"authors":["Kurt Butler","Daniel Waxman","Petar M. Djurić"],"abstract":"Causal discovery with time series data remains a challenging yet increasingly important task across many scientific domains. Convergent cross mapping (CCM) and related methods have been proposed to study time series that are generated by dynamical systems, where traditional approaches like Granger causality are unreliable. However, CCM often yields inaccurate results depending upon the quality of the data. We propose the Tangent Space Causal Inference (TSCI) method for detecting causalities in dynamical systems. TSCI works by considering vector fields as explicit representations of the systems' dynamics and checks for the degree of synchronization between the learned vector fields. The TSCI approach is model-agnostic and can be used as a drop-in replacement for CCM and its generalizations. We first present a basic version of the TSCI algorithm, which is shown to be more effective than the basic CCM algorithm with very little additional computation. We additionally present augmented versions of TSCI that leverage the expressive power of latent variable models and deep learning. We validate our theory on standard systems, and we demonstrate improved causal inference performance across a number of benchmark tasks.","url_abs":"https://arxiv.org/abs/2410.23499v1","url_pdf":"https://arxiv.org/pdf/2410.23499v1.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":"tangent-space-causal-inference-leveraging","repo_url":"https://github.com/KurtButler/tangentspaces","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"jax","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"causal-discovery","task_name":"Causal Discovery"},{"task_slug":"causal-inference","task_name":"Causal Inference"},{"task_slug":"time-series-1","task_name":"Time Series"}],"methods":[{"method_slug":"causal-inference","method_name":"Causal inference"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/2410.23499","atlas_url":"https://app.syntology.ai/?focus=2410.23499","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2410.23499"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/KurtButler/tangentspaces","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":8},"by_repo_kind":{"official":{"samples":8,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"b9a951d367c8d9ff","entry":"auto_window","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/utils.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b9a951d367c8d9ff"}},{"code_sha256_prefix":"2258cab64f4fe6dd","entry":"autocorr_func_1d","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/utils.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2258cab64f4fe6dd"}},{"code_sha256_prefix":"d7e31697a7ff00fe","entry":"compress_df","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/latent_tsci/experiments/Dpendulum/gruode_scores.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/latent_tsci/experiments/Dpendulum/gruode_scores.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d7e31697a7ff00fe"}},{"code_sha256_prefix":"5ac066a67be06009","entry":"embed_time_series","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/latent_tsci/experiments/Dpendulum/gruode_scores.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/latent_tsci/experiments/Dpendulum/gruode_scores.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5ac066a67be06009"}},{"code_sha256_prefix":"7e8f863a84ebac0f","entry":"embed_time_series","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/latent_tsci/latentccm/causal_inf.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/latent_tsci/latentccm/causal_inf.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7e8f863a84ebac0f"}},{"code_sha256_prefix":"7213a7c9a6067de0","entry":"estimate_threshold","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/rossler_lorenz_sine_wave.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/rossler_lorenz_sine_wave.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7213a7c9a6067de0"}},{"code_sha256_prefix":"a87ef11e3dd91c9f","entry":"next_pow_two","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/utils.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/utils.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a87ef11e3dd91c9f"}},{"code_sha256_prefix":"893db20c8e8c8dbd","entry":"tsci_torch","repo":"KurtButler/tangentspaces","repo_kind":"official","path":"python/tsci.py","file_url":"https://github.com/KurtButler/tangentspaces/blob/HEAD/python/tsci.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"893db20c8e8c8dbd"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}