Skip to main content

Distortion

Enum Distortion 

Source
pub enum Distortion {
    Tvar(f64),
    Wang(f64),
    ProportionalHazard(f64),
    DualPower(f64),
    Exponential(f64),
}
Expand description

A distortion of the survival function. Every variant is concave, so every measure here is coherent.

Variantg(s)Parameter
Tvar(p)min(s / (1 - p), 1)p in [0, 1]
Wang(λ)Φ(Φ⁻¹(s) + λ)λ >= 0
ProportionalHazard(ρ)s^ρρ in (0, 1]
DualPower(β)1 - (1 - s)^ββ >= 1
Exponential(k)(1 - e^(-k s)) / (1 - e^(-k))k > 0

Each has a parameter value that gives the mean (Tvar(0), Wang(0), ProportionalHazard(1), DualPower(1), and Exponential(k) as k → 0).

A concave distortion is a spectral risk measure, ρ = ∫₀¹ φ(u) VaR_u du with the non-decreasing risk-aversion spectrum φ(u) = g'(1 - u). Exponential(k) is the spectral measure with exponential risk aversion, φ(u) = k e^(-k(1-u)) / (1 - e^(-k)) (Acerbi, 2002; Dowd, Cotter and Sorwar, 2008); Tvar(p) is the one whose spectrum is flat above p.

use prospicio_prob::Distortion;

let x = [1.0, 2.0, 3.0, 4.0];
// TVaR at 50%: the mean of the top half.
assert_eq!(Distortion::tvar(0.5).unwrap().apply_sorted(&x), 3.5);
// Wang with λ = 0 is the mean.
assert!((Distortion::wang(0.0).unwrap().apply_sorted(&x) - 2.5).abs() < 1e-15);

Variants§

§

Tvar(f64)

§

Wang(f64)

§

ProportionalHazard(f64)

§

DualPower(f64)

§

Exponential(f64)

Implementations§

Source§

impl Distortion

Source

pub fn tvar(p: f64) -> Result<Self>

Tail value at risk at level p.

Source

pub fn wang(lambda: f64) -> Result<Self>

Wang transform with market price of risk lambda >= 0.

Source

pub fn proportional_hazard(rho: f64) -> Result<Self>

Proportional hazard transform with rho in (0, 1].

Source

pub fn dual_power(beta: f64) -> Result<Self>

Dual power transform with beta >= 1.

Source

pub fn exponential(k: f64) -> Result<Self>

The spectral measure with exponential risk aversion k > 0: the larger k, the more weight on the worst outcomes.

Source

pub fn g(&self, s: f64) -> f64

The distortion g(s) of a survival probability s in [0, 1].

Source

pub fn weights(&self, n: usize) -> Vec<f64>

Weights for n equally likely values sorted ascending: value i (0-based) gets g((n - i) / n) - g((n - i - 1) / n). They are non-negative and sum to 1.

use prospicio_prob::Distortion;

// TVaR at 50% on four values: the top two, equally.
assert_eq!(Distortion::tvar(0.5).unwrap().weights(4), [0.0, 0.0, 0.5, 0.5]);
Source

pub fn apply_sorted(&self, sorted: &[f64]) -> f64

The risk measure of equally likely draws sorted ascending.

For Tvar(p) this agrees with tvar_sorted up to rounding, including the fractional weight at the VaR. sorted must be non-empty and sorted ascending; this is checked only in debug builds.

Source

pub fn apply_discrete(&self, values: &[f64], probs: &[f64]) -> f64

The risk measure of a discrete distribution with ascending values and their probs (which should sum to 1).

Survival probabilities are summed from the top, so small tail probabilities keep their precision.

use prospicio_prob::Distortion;

let ph = Distortion::proportional_hazard(0.5).unwrap();
// P(X = 0) = 0.75, P(X = 1) = 0.25: ρ = g(0.25) = 0.5.
assert_eq!(ph.apply_discrete(&[0.0, 1.0], &[0.75, 0.25]), 0.5);

Trait Implementations§

Source§

impl Clone for Distortion

Source§

fn clone(&self) -> Distortion

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for Distortion

Source§

impl Debug for Distortion

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Distortion

Source§

fn eq(&self, other: &Distortion) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Distortion

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V