Consider a characterisation of an uncertain quantity depicted as the dark gray triangular shape on the right below. We might call this triangular structure a consonant p-box. Converting this characterisation to a traditional p-box yields the structure on left. To effect this conversion, it is only necessary to flip the right edge of the triangular shape. Converting the resulting traditional p-box back to a consonant form using Hose's <<formula>> yields the fatter, light gray structure on the right. The original conversion from the triangular structure is therefore not invertible because the uncertainty grows on the return. If we repeat these conversions back and forth several times, the structures on both sides will converge to vacuous intervals over the support [0, 0.3]. We use the term 'ratcheting' to refer to this increase of uncertainty in such transformations.
P-box - possibility hybrid arithmetic
When does propagating both p-box and possibilistic information tighten risk results?
In the following we will begin with a fuzzy number, convert it to a p-box and perform sum under independence with both separately. Both methods give the same result: it doesn't matter if we convert to a p-box before or after the operation.
Consider the following fuzzy number:
a = Fuzzy(-1, 2, 3)
If we convert it to a p-box (flip right edge):
apbox = makepbox(a)
and then perform sum under independence with both:
b = a + a (sigmaFuzzy with C = π)
bpbox = apbox + apbox (sigma with C = π)
Clearly we also get the blue p-box if we now convert the red fuzzy number.
What does this mean for ratcheting? The same would not be true if we had started with a DSS.
Interestingly the fuzzy calculation give similar tail risks, but tighter internally:
Fuzzy Tail = [0, 0.230001]
pbox Tail = [0, 0.225]
Fuzzy Internal = [0.214999, 1]
pbox Internal = [0, 1]
Julia code:
include("../src/FuzzyNumbers.jl")
a = Fuzzy(-1, 2, 3)
plot(a, name = "originalFuzzy")
apbox = makepbox(a)
ProbabilityBoundsAnalysis.plot(apbox, name = "pboxConvert")
bfuzzy = sigmaFuzzy(a,a,op=+)
bpbox = apbox + apbox
plot(bfuzzy, name = "sum", col = "red")
ProbabilityBoundsAnalysis.plot(bpbox, name = "sum", col = "blue")
tail = interval(-3,0)
int = interval(2,5)
fuzzyMassTail = mass(bfuzzy, tail)
fuzzyMassInt = mass(bfuzzy, int)
pboxMassTail = ProbabilityBoundsAnalysis.mass(bpbox,tail)
pboxMassInt = ProbabilityBoundsAnalysis.mass(bpbox,int)
println("Fuzzy Tail = $fuzzyMassTail")
println("pbox Tail = $pboxMassTail")
println()
println("Fuzzy Internal = $fuzzyMassInt")
println("pbox Internal = $pboxMassInt")