{"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/a-practical-approach-to-causal-inference-over","title":"A Practical Approach to Causal Inference over Time","arxiv_id":"2410.10502","date":"2024-10-14","proceeding":null,"authors":["Martina Cinquini","Isacco Beretta","Salvatore Ruggieri","Isabel Valera"],"abstract":"In this paper, we focus on estimating the causal effect of an intervention over time on a dynamical system. To that end, we formally define causal interventions and their effects over time on discrete-time stochastic processes (DSPs). Then, we show under which conditions the equilibrium states of a DSP, both before and after a causal intervention, can be captured by a structural causal model (SCM). With such an equivalence at hand, we provide an explicit mapping from vector autoregressive models (VARs), broadly applied in econometrics, to linear, but potentially cyclic and/or affected by unmeasured confounders, SCMs. The resulting causal VAR framework allows us to perform causal inference over time from observational time series data. Our experiments on synthetic and real-world datasets show that the proposed framework achieves strong performance in terms of observational forecasting while enabling accurate estimation of the causal effect of interventions on dynamical systems. We demonstrate, through a case study, the potential practical questions that can be addressed using the proposed causal VAR framework.","url_abs":"https://arxiv.org/abs/2410.10502v1","url_pdf":"https://arxiv.org/pdf/2410.10502v1.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":"a-practical-approach-to-causal-inference-over","repo_url":"https://github.com/marti5ini/ci-over-time","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[{"task_slug":"causal-inference","task_name":"Causal Inference"},{"task_slug":"econometrics","task_name":"Econometrics"}],"methods":[{"method_slug":"causal-inference","method_name":"Causal inference"},{"method_slug":"focus","method_name":"Focus"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2410.10502","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2410.10502"}},"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/marti5ini/ci-over-time","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"ran":13,"unverified":2},"by_repo_kind":{"official":{"samples":15,"ran":13,"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":"482ed46f536d1718","entry":"add_memory","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/generation/setup_simulation.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/generation/setup_simulation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"482ed46f536d1718"}},{"code_sha256_prefix":"1df119d1bb4071d5","entry":"additive_intervention","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/interventions.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/interventions.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1df119d1bb4071d5"}},{"code_sha256_prefix":"6ff33a09c20f6227","entry":"calculate_mae","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"experiments/utils.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/experiments/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"6ff33a09c20f6227"}},{"code_sha256_prefix":"09ff82b7ed346ed8","entry":"calculate_r2","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"experiments/utils.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/experiments/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"09ff82b7ed346ed8"}},{"code_sha256_prefix":"e589f9c779df5ecf","entry":"calculate_score","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"experiments/utils.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/experiments/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"e589f9c779df5ecf"}},{"code_sha256_prefix":"0bb28e75ad3acf21","entry":"estimate_bounded","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/fitting.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/fitting.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"0bb28e75ad3acf21"}},{"code_sha256_prefix":"1851e8a4f61561ef","entry":"generate_one_column_latex_table","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"experiments/latex_tables.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/experiments/latex_tables.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1851e8a4f61561ef"}},{"code_sha256_prefix":"c85c90ea3aa02d8d","entry":"generate_train_group","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"experiments/latex_tables.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/experiments/latex_tables.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"c85c90ea3aa02d8d"}},{"code_sha256_prefix":"235b014b0703e83c","entry":"get_coef_matrices_r","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/fitting.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/fitting.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"235b014b0703e83c"}},{"code_sha256_prefix":"a0b28d7e820939f7","entry":"initialize_matrices","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/generation/setup_simulation.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/generation/setup_simulation.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"a0b28d7e820939f7"}},{"code_sha256_prefix":"fce11f21fd9158f4","entry":"interventions_with_future_steps_german","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"experiments/latex_tables.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/experiments/latex_tables.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"fce11f21fd9158f4"}},{"code_sha256_prefix":"1769d0c09b33ee36","entry":"mu_to_v","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/interventions.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/interventions.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1769d0c09b33ee36"}},{"code_sha256_prefix":"0c7ab54adc395844","entry":"numpy_to_panel_data","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/fitting.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/fitting.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"0c7ab54adc395844"}},{"code_sha256_prefix":"30f0cfa867f2293d","entry":"apply_force","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/interventions.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/interventions.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"30f0cfa867f2293d"}},{"code_sha256_prefix":"60c9a9936c8a8d5d","entry":"estimate_bounded","repo":"marti5ini/ci-over-time","repo_kind":"official","path":"src/CausalVAR/fitting_var_bounded.py","file_url":"https://github.com/marti5ini/ci-over-time/blob/HEAD/src/CausalVAR/fitting_var_bounded.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"60c9a9936c8a8d5d"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}