Skip to content

Constraining uncertain values

Uncertain values may be constrained in various ways, as visualised by the following example.

Which was generated as follows. Note that the plot recipe normalises the distributions after constraining the uncertain values.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
uval = UncertainValue(Normal, 2, 5)

p1 = plot(uval, label = "full support", title = "Quantile truncation")
plot!(constrain(uval, TruncateQuantiles(0.2, 0.8)), label = "quantile range truncation")
plot!(constrain(uval, TruncateUpperQuantile(0.9)), label = "upper quantile truncation")
plot!(constrain(uval, TruncateLowerQuantile(0.1)), label = "lower quantile truncation")

p2 = plot(uval, label = "full support", title = "Value truncation")
plot!(constrain(uval, TruncateRange(2, 4)), ls = :dash, label = "range truncation")
plot!(constrain(uval, TruncateMaximum(4.5)), ls = :dash, label = "maximum value truncation")
plot!(constrain(uval, TruncateMinimum(-2)), ls = :dash, label = "minimum value truncation")

plot(p1, p2, layout = (2, 1), link = :x, xlabel = "value", ylabel = "probability")

Documentation

# UncertainData.SamplingConstraints.constrainMethod.

1
constrain(uv::AbstractUncertainValue, constraint::SamplingConstraint)

Apply the constraint and truncate the support of the distribution furnishing the uncertain value uv. Returns a constrained uncertain value.

source

Examples

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
using UncertainData, Distributions

# Define an uncertain value furnished by a theoretical distribution
uv = UncertainValue(Normal, 1, 0.5)

# Constrain the support of the furnishing distribution using various
# constraints
uvc_lq = constrain(uv, TruncateLowerQuantile(0.2))
uvc_uq = constrain(uv, TruncateUpperQuantile(0.8))
uvc_q = constrain(uv, TruncateQuantiles(0.2, 0.8))
uvc_min = constrain(uv, TruncateMinimum(0.5))
uvc_max = constrain(uv, TruncateMaximum(1.5))
uvc_range = constrain(uv, TruncateRange(0.5, 1.5))
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
using UncertainData, Distributions

# Define an uncertain value furnished by a theoretical distribution with
# parameters fitted to empirical data
uv = UncertainValue(Normal, rand(Normal(-1, 0.2), 1000))

# Constrain the support of the furnishing distribution using various
# constraints
uvc_lq = constrain(uv, TruncateLowerQuantile(0.2))
uvc_uq = constrain(uv, TruncateUpperQuantile(0.8))
uvc_q = constrain(uv, TruncateQuantiles(0.2, 0.8))
uvc_min = constrain(uv, TruncateMinimum(0.5))
uvc_max = constrain(uv, TruncateMaximum(1.5))
uvc_range = constrain(uv, TruncateRange(0.5, 1.5))
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Define an uncertain value furnished by a kernel density estimate to the
# distribution of the empirical data
uv = UncertainValue(UnivariateKDE, rand(Uniform(10, 15), 1000))

# Constrain the support of the furnishing distribution using various
# constraints
uvc_lq = constrain(uv, TruncateLowerQuantile(0.2))
uvc_uq = constrain(uv, TruncateUpperQuantile(0.8))
uvc_q = constrain(uv, TruncateQuantiles(0.2, 0.8))
uvc_min = constrain(uv, TruncateMinimum(13))
uvc_max = constrain(uv, TruncateMaximum(13))
uvc_range = constrain(uv, TruncateRange(11, 12))