How CausalTargeted compares

CausalTargeted.jl estimates continuous and longitudinal causal parameters after identification: LMTP / MTP grids, positivity and omitted-confounder diagnostics, and small-n Super Learner profiles. Mediation TE / NDE / NIE grids live in CausalMediation.jl (soft façades remain here). Graphs and certificates live upstream in CausalDynamics.jl.

R packages lmtp and crumble are the closest conceptual analogues (not API identity; see NAMING.md). Ananke is the main Python LMTP reference. DoubleML is Neyman-orthogonal and related in spirit, not full LMTP parity.

Choose CausalTargeted when you already have (or can obtain) an IdentificationResult, want Julia-native LMTP/mediation grids with fold caches, and care about small-n defaults and certificates on the estimate.

Prefer lmtp / Ananke when your pipeline is already R or Python end-to-end, or you need a specialised option (e.g. GPU Riesz nets, survival LMTP flavours) that we deliberately do not claim.

Stack overview: ECOSYSTEM_COMPARISON.md.

flowchart LR
  subgraph juliaStack [Julia_typed_pipeline]
    G[Graph_CDM] --> ID[identify_certificate]
    ID --> SIM[simulate_counterfactual]
    ID --> EST[LMTP_mediation]
    ID --> PLOT[DAGMakie]
    SIM --> EST
  end

Legend

MarkMeaning
YesFirst-class, documented
PartialPossible with glue or a limited API
Not in that package’s usual scope
UniqueStrong differentiator here

Versus R and Python (targeted estimation)

CapabilityCausalTargetedRPython
LMTP / continuous MTP δ-gridsYesYes (lmtp)Yes (Ananke)
Sequential / longitudinal LMTPYesYes (lmtp)Yes (Ananke)
Interventional mediation TE/NDE/NIESoft façade → CausalMediationYes (crumble, tmle3 mediation)Partial (Ananke)
Cross-fit Super Learner profilesYes (lean / rich / small-n)Yes (sl3 + lmtp/tmle3)Partial (DoubleML / EconML nuisances)
Point-treatment TMLE (CM/ATE)— (use TMLE.jl)Yes (tmle / tmle3)Partial (Ananke, others)
Consumes upstream graph ID certificateUniquePartial (separate packages)Partial (DoWhy closer)
Positivity atlas / diagnosticsYesPartial (lmtp)Partial
Omitted-confounder sensitivityYesYes (sensemakr + glue)Partial (DoWhy)
DiD / g-computation utilitiesYesYes (did / g-comp pkgs)Partial (CausalML / DoWhy)
Full parity with every lmtp/crumble option— (deliberate)Yes

Julia neighbours

PackageRole
CausalDynamics.jlidentify, IdentificationResult, CDMs (comparison)
TMLE.jlPoint-treatment CM / ATE / AIE
DAGMakie.jlOptional DAG figures (comparison)

What is distinctive here

  • Typed hand-offplan_mtp / execute_estimand carry identification certificates into estimate metadata
  • Small-n defaults — learner profiles and checklists aimed at tens to low hundreds of units (see Small-n checklist)
  • Julia-native EIF grids — no RCall on the estimation path

What we deliberately do not claim

Full parity with every option in R lmtp / crumble (GPU Riesz nets, all mediation estimand flavours, survival LMTP). See Methods.

The CDCS book walks identify → estimate → display end to end.