This function accepts input from slab() along with a vector of horizon names, and returns a data.frame of the most likely horizon boundaries.

get.ml.hz(x, o.names = attr(x, which = "original.levels"))

## Arguments

x

output from slab

o.names

an optional character vector of horizon designations that will be used in the final table

## Value

A dataframe with the following columns:

hz

horizon names

top

top boundary

bottom

bottom boundary

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.

## Details

This function expects that x is a data.frame generated by slab. If x was not generated by slab, then o.names is required.

slab()

D.E. Beaudette

## Examples


data(sp1)
depths(sp1) <- id ~ top + bottom

# normalize horizon names: result is a factor
sp1$name <- generalize.hz(sp1$name,
new=c('O','A','B','C'),
pat=c('O', '^A','^B','C'))

# compute slice-wise probability so that it sums to contributing fraction, from 0-150
a <- slab(sp1, fm= ~ name, cpm=1, slab.structure=0:150)
#> Note: aqp::slice() will be deprecated in aqp version 2.0
#> --> Please consider using the more efficient aqp::dice()

# generate table of ML horizonation
get.ml.hz(a)
#>   hz top bottom confidence pseudo.brier    mean.H
#> 1  O   0      2         37    0.3950617 0.9910761
#> 2  A   2     32         75    0.1547325 0.7922828
#> 3  B  32    145         57    0.3574667 1.0813045
#> 4  C 145    150         71    0.1250000 0.8112781