Adoption notes: dynamical causality methods (Peters / Shi)

Working notes for expanding CausalDynamics toward methods from:

Status in this package

MethodStatusLocation
Continuous do taxonomy (pin / IC / soft force / RHS)ImplementedSciML ext + continuous interventions
Continuous parent sets / ODE parent graphImplementedContinuousCDMSpec(; parents), continuous_cdm_graph, with_parents
IEE → TemporalDAGSpecImplementediee.jl; Associations KSG1 via mi=:auto
ODE parent ranking across environmentsImplemented (v0)ode_parents.jl + DataInterpolations ext
Forward local sensitivityImplementedforward_sensitivity_cdm
Conditional IEE (cIEE) / PC pruningDeferredShi outlook
Full constrained-spline CausalKinetiX scoringDeferredDerivative-space LOO score for now

IEE estimators

using CausalDynamics, Associations, DataFrames

# Preferred when Associations is loaded
s = interventional_embedding_entropy(x, y; p = 2, k = 2, mi = :auto)

# MATLAB-faithful port (concordance / regression tests)
s_ref = interventional_embedding_entropy(x, y; p = 2, k = 2, mi = :reference)

ODE parents across environments (CausalKinetiX reference)

The Julia API is infer_ode_parents / ode_parent_ranking_to_continuous_spec. It implements the derivative-space leave-one-environment OLS score from the CausalKinetiX papers (without constrained QP smoothers):

  1. Differentiate trajectories (finite_difference_derivative, or cubic splines via DataInterpolations)
  2. Score each candidate parent set by LOO stability of $Ẏ ∼ X_S$ across environments
  3. Aggregate inclusion among top-K models
  4. Bridge into ContinuousCDMSpec parents
using CausalDynamics, DataInterpolations

ranking = infer_ode_parents(times, trajectories, env, target; max_size = 2)
spec = ode_parent_ranking_to_continuous_spec(ranking, [:Y, :X1, :X2]; max_parents = 2)

Forward sensitivity

using OrdinaryDiffEq, SciMLSensitivity
sol = forward_sensitivity_cdm(spec, lotka!, u0, tspan, p)

Boundaries

  • Discovery rankings feed identification; they do not replace identify / certificates.
  • Estimation grids stay in CausalTargeted.
  • Prefer Associations.jl when upstreaming IEE.
  • Prefer ordinary dynamical / continuous-CDM language in APIs; reserve “kinetic” for Peters/CausalKinetiX citations, and “invariant” for explicit ICP glosses (mechanism stable across environments), not as standing API names.