edaphos 1.4.0 — Pillar 1 on real Cerrado data
Summary
Takes Pillar 1 from the synthetic br_cerrado toy to real
Brazilian Cerrado data. Backdoor-adjusted direct effects on
1 095 WoSIS topsoil profiles, with a DAG built against the exact
v1.3.1 covariate stack and block-bootstrap confidence intervals that
respect the spatial clustering of the profiles.
New API
causal_cerrado_real_dag()— a DAG over 12 nodes / 23
directed edges on the column names of the v1.3.1 case-study
bundle, encoding: relief → climate (orographic + lapse-rate) →
land cover; relief → texture → density; climate + texture +
slope + land cover → SOC.
Identification of direct effects uses the existing
causal_adjustment_set() + causal_estimate_effect() API — no new
estimator code, just a domain-specific DAG and a real dataset.
Identified direct effects (LM, block-bootstrap by cluster, B = 200)
| Exposure | Naive slope | Identified direct | Bootstrap 95 % CI |
|---|---|---|---|
wc_bio_12 (MAP, g/kg per mm) |
+0.0072 | +0.0071 | [+0.0002, +0.0121] |
wc_landcover_trees (g/kg per % trees) |
+0.898 | +2.048 (2.3×) | [−0.465, +6.901] |
soilgrids_clay (g/kg per % clay) |
+0.526 | +0.195 (0.37×) | [−0.099, +0.688] |
Confounding moves in both directions. Naive OLS under-estimates
the land-use causal effect by more than half (tree cover really
does matter in Cerrado SOC) and over-estimates clay's direct
effect by nearly 3× (its apparent SOC lift is mostly slope / texture
confounding). Without DAG-guided adjustment all three numbers would
be reported wrong — exactly the kind of mistake Pearl's framework
is supposed to prevent, now demonstrated on a real Brazilian
dataset instead of a synthetic cube.
Deliverables
data-raw/causal_cerrado_real.R— fully reproducible analysis.inst/extdata/causal_cerrado_real.rds— 62 KB slim results
bundle.- Vignette
pilar1-causal-real— narrative walk-through with the
DAG rendered viaggdagand the naive-vs-identified summary
table.
Quality
- 11 new tests pinning the DAG structure and the adjustment sets
for all three exposures. R CMD check --as-cran: 0 errors / 0 warnings / 2 harmless
NOTEs.