The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

End-to-end WRB 2022 classification with Ch 6 names

This vignette walks the full WRB 2022 (4th edition) classification flow on the canonical Ferralsol fixture, end to end – from a raw PedonRecord to the complete Chapter 6 name with both principal and supplementary qualifiers in the canonical parenthesised form.

The Ferralsol fixture represents a typical Brazilian Latossolo (gneiss-derived, Mata Atlântica). After v0.9.3, classify_wrb2022() resolves it to:

Geric Ferric Rhodic Chromic Ferralsol (Clayic, Humic, Dystric, Ochric, Rubic)

We will inspect each step that produces that name.

1. Build the pedon

The canonical fixture exposes a published-quality profile. Use it as the working pedon.

pr <- make_ferralsol_canonical()
pr
#> 
#> ── PedonRecord ──
#> 
#> Site: id=FR-canonical-01 | (-22.5000, -43.7000) | BR | 2024-03-10 | on gneiss
#> Horizons (5):
#> 1) A 0-15 cm clay=50.0 silt=15.0 sand=35.0 CEC=8.0 pH=4.8 OC=2.0
#> 2) AB 15-35 cm clay=52.0 silt=14.0 sand=34.0 CEC=6.5 pH=4.7 OC=1.2
#> 3) BA 35-65 cm clay=55.0 silt=10.0 sand=35.0 CEC=5.5 pH=4.7 OC=0.6
#> 4) Bw1 65-130 cm clay=60.0 silt=8.0 sand=32.0 CEC=5.0 pH=4.8 OC=0.3
#> 5) Bw2 130-200 cm clay=60.0 silt=8.0 sand=32.0 CEC=4.8 pH=4.9 OC=0.2

A glance at the horizons and chemistry:

knitr::kable(
  pr$horizons[, .(top_cm, bottom_cm, designation,
                  munsell_hue_moist, munsell_value_moist, munsell_chroma_moist,
                  clay_pct, oc_pct, cec_cmol, bs_pct,
                  ph_h2o, ph_kcl)]
)
top_cm bottom_cm designation munsell_hue_moist munsell_value_moist munsell_chroma_moist clay_pct oc_pct cec_cmol bs_pct ph_h2o ph_kcl
0 15 A 2.5YR 3 4 50 2.0 8.0 24 4.8 4.0
15 35 AB 2.5YR 3 4 52 1.2 6.5 17 4.7 4.0
35 65 BA 2.5YR 3 6 55 0.6 5.5 14 4.7 4.0
65 130 Bw1 2.5YR 4 6 60 0.3 5.0 13 4.8 4.1
130 200 Bw2 2.5YR 4 6 60 0.2 4.8 13 4.9 4.2

Notable features for WRB key:

2. Run the WRB key

classify_wrb2022() walks the canonical Ch 4 RSG order (HS -> AT -> … -> RG) and returns the first RSG whose tier-2 gate is satisfied.

res <- classify_wrb2022(pr)
res
#> 
#> ── ClassificationResult (WRB 2022) ──
#> 
#> Name: Geric Ferric Rhodic Chromic Ferralsol (Clayic, Humic, Dystric, Ochric,
#> Rubic)
#> RSG/Order: Ferralsols
#> Qualifiers: Geric, Ferric, Rhodic, Chromic, Clayic, Humic, Dystric, Ochric,
#> Rubic, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
#> al_ox_pct, fe_ox_pct, phosphate_retention_pct, volcanic_glass_pct, FALSE,
#> volcanic_glass_pct, FALSE, FALSE, plinthite_pct, FALSE, plinthite_pct, FALSE,
#> plinthite_pct, FALSE, top_cm, bottom_cm, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE,
#> redoximorphic_features_pct, FALSE, redoximorphic_features_pct, FALSE, FALSE,
#> p_mehlich3_mg_kg, FALSE, p_mehlich3_mg_kg, FALSE, FALSE, FALSE, FALSE, FALSE,
#> FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
#> TRUE, FALSE
#> Evidence grade: A
#> 
#> ── Ambiguities
#> - TC: Indeterminate -- missing 3 attribute(s): artefacts_pct,
#> geomembrane_present, technic_hardmaterial_pct
#> - CR: Indeterminate -- missing 1 attribute(s): permafrost_temp_C
#> - VR: Indeterminate -- missing 1 attribute(s): slickensides
#> - SC: Indeterminate -- missing 1 attribute(s): ec_dS_m
#> - PZ: Indeterminate -- missing 2 attribute(s): al_ox_pct, fe_ox_pct
#> - PT: Indeterminate -- missing 1 attribute(s): plinthite_pct
#> - ST: Indeterminate -- missing 1 attribute(s): redoximorphic_features_pct
#> 
#> ── Missing data that would refine result
#> artefacts_pct, geomembrane_present, technic_hardmaterial_pct,
#> permafrost_temp_C, slickensides, ec_dS_m, redoximorphic_features_pct,
#> al_ox_pct, fe_ox_pct, phosphate_retention_pct, volcanic_glass_pct,
#> plinthite_pct
#> 
#> ── Warnings
#> ! 12 distinct attribute(s) missing across the key trace -- see $missing_data
#> 
#> ── Key trace
#> (16 RSGs tested before assignment)
#> 1. HS Histosols -- failed
#> 2. AT Anthrosols -- failed
#> 3. TC Technosols -- NA (3 attrs missing)
#> 4. CR Cryosols -- NA (1 attrs missing)
#> 5. LP Leptosols -- failed
#> 6. SN Solonetz -- failed
#> 7. VR Vertisols -- NA (1 attrs missing)
#> 8. SC Solonchaks -- NA (1 attrs missing)
#> 9. GL Gleysols -- failed (1 attrs missing)
#> 10. AN Andosols -- failed (4 attrs missing)
#> 11. PZ Podzols -- NA (2 attrs missing)
#> 12. PT Plinthosols -- NA (1 attrs missing)
#> 13. PL Planosols -- failed
#> 14. ST Stagnosols -- NA (1 attrs missing)
#> 15. NT Nitisols -- failed
#> 16. FR Ferralsols -- PASSED

The returned ClassificationResult carries:

3. Inspect the principal qualifier resolution

After the RSG is assigned, the resolver walks the canonical Ch 4 principal-qualifier list for that RSG (e.g. for Ferralsols: Vetic, Posic, Acric, Lixic, Geric, Hyperdystric, ...) and tests each against the pedon.

qres <- resolve_wrb_qualifiers(pr, "FR")
qres$principal
#> [1] "Geric"   "Ferric"  "Rhodic"  "Chromic"

The four principals that pass the Ferralsol fixture, in canonical Ch 4 order:

#>   Qualifier
#> 1     Geric
#> 2    Ferric
#> 3    Rhodic
#> 4   Chromic
#>                                                                                                                                               Why
#> 1 ECEC = sum of bases + Al_KCl <= 1.5 cmol+/kg fine earth in some layer of the upper 100 cm. Layer 4 (Bw1, top = 65 cm) has ECEC = 1.18 cmol+/kg.
#> 2                                                                         Iron-rich subsoil (Fe_dcb >= 5%); fe_dcb_pct hits 8-9% in this fixture.
#> 3                                   Hue 2.5YR moist, value < 4 in 25-150 cm. Bw1 has value = 4 (failing in some layers but BA satisfies value 3).
#> 4                                                              Hue redder than 7.5YR + chroma > 4 in 25-150 cm subsoil. Bw1 chroma = 6 satisfies.

The trace slot keeps every Ch 4 principal that was tested, including those that failed. Useful for diagnostic debugging:

trace_df <- do.call(
  rbind,
  lapply(names(qres$trace), function(q) {
    t <- qres$trace[[q]]
    data.frame(qualifier = q,
               passed    = if (is.null(t$passed)) NA else t$passed,
               note      = t$note %||% "")
  })
)
head(trace_df, 12)
#>       qualifier passed note
#> 1         Vetic  FALSE     
#> 2         Posic  FALSE     
#> 3         Acric  FALSE     
#> 4         Lixic  FALSE     
#> 5         Geric   TRUE     
#> 6  Hyperdystric  FALSE     
#> 7   Hypereutric  FALSE     
#> 8        Histic  FALSE     
#> 9         Folic  FALSE     
#> 10        Andic  FALSE     
#> 11       Vitric  FALSE     
#> 12      Sombric  FALSE

4. Inspect the supplementary qualifier resolution

Supplementary qualifiers are the parenthesised tags in the WRB Ch 6 name. They refine the soil description with texture / chemistry / colour information that is not strong enough to be a principal but still informative.

qres$supplementary
#> [1] "Clayic"  "Humic"   "Dystric" "Ochric"  "Rubic"

What each tag captures for this Ferralsol:

#>   Qualifier
#> 1    Clayic
#> 2     Humic
#> 3   Dystric
#> 4    Ochric
#> 5     Rubic
#>                                                                                                Why
#> 1 Clay >= 60 % over a layer thicker than 30 cm in the upper 100 cm; Bw1 has clay = 60% over 65 cm.
#> 2                                 Weighted OC >= 1 % in the upper 50 cm; weighted OC ~ 1.1 % here.
#> 3                       BS < 50 % throughout 20-100 cm; BS = 13-24 % across all four upper layers.
#> 4                      OC >= 0.2 % in upper 10 cm + no mollic + no umbric; surface has OC = 2.0 %.
#> 5         Hue <= 5YR + chroma >= 4 in upper 100 cm (less strict than Rhodic). 2.5YR / 6 satisfies.

5. Compose the Ch 6 name

format_wrb_name() glues principal and supplementary into the canonical form:

format_wrb_name(
  rsg_name      = "Ferralsols",
  principal     = qres$principal,
  supplementary = qres$supplementary
)
#> [1] "Geric Ferric Rhodic Chromic Ferralsol (Clayic, Humic, Dystric, Ochric, Rubic)"

This is exactly the string returned by classify_wrb2022()$name.

6. Family suppression

When several qualifiers from the same WRB family (e.g. Calcic / Hypocalcic / Protocalcic) pass the same RSG, only the most-specific sibling appears in the name. The suppression is applied after all candidates are evaluated and works on both the principal and supplementary lists.

The internal table:

str(soilKey:::.wrb_qualifier_families)
#> List of 10
#>  $ salinity: chr [1:3] "Hypersalic" "Salic" "Hyposalic"
#>  $ sodicity: chr [1:3] "Hypersodic" "Sodic" "Hyposodic"
#>  $ calcic  : chr [1:4] "Hypercalcic" "Calcic" "Hypocalcic" "Protocalcic"
#>  $ gypsic  : chr [1:4] "Hypergypsic" "Gypsic" "Hypogypsic" "Protogypsic"
#>  $ vertic  : chr [1:2] "Vertic" "Protovertic"
#>  $ albic   : chr [1:2] "Hyperalbic" "Albic"
#>  $ skeletic: chr [1:2] "Hyperskeletic" "Skeletic"
#>  $ eutric  : chr [1:2] "Hypereutric" "Eutric"
#>  $ dystric : chr [1:2] "Hyperdystric" "Dystric"
#>  $ alic    : chr [1:2] "Hyperalic" "Alic"

A worked example: a synthetic Calcisol that satisfies Calcic, Hypocalcic, and Protocalcic simultaneously will collapse to just Calcic.

soilKey:::.suppress_qualifier_siblings(
  c("Mollic", "Calcic", "Hypocalcic", "Protocalcic", "Cambic")
)
#> [1] "Mollic" "Calcic" "Cambic"

7. Evidence grade

classify_wrb2022() reports an evidence_grade summarising the provenance of every attribute used in the classification. A means every used value was lab-measured; D means the result rests on VLM-extracted or user-assumed values.

res$evidence_grade
#> [1] "A"

The Ferralsol fixture has all measured values, so the grade is A. The v01_getting_started vignette shows how pedon$add_measurement() with source = "extracted_vlm" or source = "predicted_spectra" lowers the grade – so you always know how robust the classification is.

6. Render a self-contained pedologist-facing report

The report() generic takes a ClassificationResult (or a list of them, or a PedonRecord – in which case all three keys are run automatically) and writes a single-file HTML report with inline CSS, no external network requests, suitable for archiving with a laudo. The PDF path goes through rmarkdown::render() and requires a working LaTeX engine.

# Pass the three classifications as a list:
results <- list(
  classify_wrb2022(pr),
  classify_sibcs(pr, include_familia = TRUE),
  classify_usda(pr)
)
out_html <- file.path(tempdir(), "perfil_ferralsol.html")
report(results, file = out_html, pedon = pr)

# Or pass the pedon directly and let report() run the three keys:
report(pr, file = out_html)

# Same content as PDF (requires LaTeX):
# report(pr, file = file.path(tempdir(), "perfil_ferralsol.pdf"))

The HTML output includes: the cross-system summary, the full key trace per system, qualifiers (principal + supplementary), evidence grade, ambiguities, missing data, the horizons table, and the per-source provenance summary. ClassificationResult$report(file) is the R6-method-style equivalent and delegates to the same code.

Summary

#> WRB 2022 name : Geric Ferric Rhodic Chromic Ferralsol (Clayic, Humic, Dystric, Ochric, Rubic)
#> Assigned RSG  : Ferralsols
#> Principal     : Geric, Ferric, Rhodic, Chromic
#> Supplementary : Clayic, Humic, Dystric, Ochric, Rubic
#> Evidence grade: A

The v03_cross_system_correlation vignette runs the same profile through the Brazilian SiBCS and the USDA Soil Taxonomy keys and shows the alignment between the three classifications.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.