@misc{grf,
title = {grf},
author = {Athey and Tibshirani and Wager},
howpublished = {\url{https://grf-labs.github.io/grf/}},
note = {Software / documentation}
}Doubly-robust ATE / ATT / ATC / overlap-weighted effect from a trained causal forest, via augmented IPW.
v2.6.1tag

Figure: Targeting curve sorted by an interpretable priority. Source — grf-labs docs.
⚠️ Unofficial community write-up of a method from grf-labs/grf (pinned at
v2.6.1). Not affiliated with the grf-labs authors — this summarizes the public documentation for demonstration. All credit & copyright belong to the original authors (Athey, Tibshirani, Wager, et al.).
What it does
Aggregates a causal forest's CATEs into a single doubly-robust average effect using AIPW scores. Consistent if either the outcome model or the propensity model is right, with a clean estimate ± 1.96·std.err.
cf <- causal_forest(X, Y, W)
average_treatment_effect(cf, target.sample = "all") # ATE
average_treatment_effect(cf, target.sample = "treated") # ATT
Targets
all (ATE), treated (ATT), control (ATC), overlap (overlap-weighted). Supports cluster-robust SEs.
Used in these workflows (3)
-
Estimating ATEs on a new target population
Train a causal forest on the source sample → reweight AIPW to a target population → report transported ATE.
-
Causal forest with time-to-event data (survival)
Censoring check → causal survival forest → RMST-scale AIPW ATE → calibration → report.
-
Heterogeneous treatment effects with a causal forest (GRF recipe)
The full GRF HTE playbook: cross-fit nuisances → causal forest → calibration → AIPW ATE → BLP → RATE → policy.
Doubly robust + cluster-robust SEs in one call. This is my default ATE reporter now, forest or not.
Nice that target.sample lets you get ATT/ATC/overlap without refitting. Overlap weights are underused.