get.ml.hz {aqp} | R Documentation |
Determine ML Horizon Boundaries
Description
This function accepts input from slab()
(a data.frame
) along with a vector of
horizon names, and returns a data.frame
of the most likely horizon
boundaries.
This function expects that x
is a data.frame
generated by
slab()
. If x
was not generated by slab()
, then o.names
is required.
Usage
get.ml.hz(x, o.names = attr(x, which = "original.levels"))
Arguments
x |
|
o.names |
an optional character vector of horizon designations that will be used in the final table |
Value
A data.frame
with the following columns:
-
hz
: horizon names -
top
: horizon top depth -
bottom
: horizon bottom depth -
confidence
: integrated probability over thickness of each ML horizon, rounded to the nearest integer -
pseudo.brier
: A "pseudo"" Brier Score for a multi-class prediction, where the most-likely horizon label is treated as the "correct" outcome. Details on the calculation for traditional Brier Scores here: https://en.wikipedia.org/wiki/Brier_score. Lower values suggest better agreement between ML horizon label and class-wise probabilities. -
mean.H
: mean Shannon entropy (bits), derived from probabilities within each most-likely horizon. Larger values suggest more confusion within each ML.
Author(s)
D.E. Beaudette
References
Beaudette, D. E., Roudier, P., & Skovlin, J. (2016). Probabilistic representation of genetic soil horizons. Digital soil morphometrics, 281-293.
See Also
Examples
# init SPC
data(sp1)
depths(sp1) <- id ~ top + bottom
# set horizon designation metadata
hzdesgnname(sp1) <- 'name'
# generalize horizon designations from character vector
# result is an ordered factor
sp1$genhz <- generalizeHz(
sp1$name,
new = c('O','A','B','C'),
pat = c('O', '^A','^B','C'),
ordered = TRUE
)
# compute slice-wise GHL probability
# so that it sums to contributing fraction
# from 0-150cm
a <- slab(sp1, fm = ~ genhz, cpm = 1, slab.structure = 0:150)
# note original GHL names are set by slab()
attr(a, 'original.levels')
# generate table of ML horizonation
get.ml.hz(a)