Towards the end of this section, Taleb inserts a sidebar as follows:
Consider the right tail
and the left tail
. Without specifying the support of the distribution:
Definition 1.3 (Probability swamps payoff (thin tails)).
Definition 1.4 (Payoff swamps probability (fat tails)).
N.B: I added the “+” and “-” superscripts to K in the last line where they were missing.
I was curious to look at this behavior for a set of distributions: normal, exponential, gamma, weibull, pareto, and cauchy. I created some functions which I provide below which will allow exploration of the effect of the parameters of the distributions. I also provide a script that can be used to run a set of examples, one for each distribution. The interesting ones in terms of the sidebar above are pareto and cauchy, but the differences between the others are of interest too.
I am not sure I understand what is special about the cases where the constant of proportionality, λ > 1. Do we say payoff swamps probability if λ = 1.1? or 5? It’s the transition from “Probability swamps Payoff” to “Payoff swamps Probability” that occurs if λ > 1 that I am not understanding. I am guessing that if a risk manager were to casually assume that his expected loss would approximate K, then he might be in for a shock if it is actually 2.K!
There’s a reference to Chapter 4 which I have yet to read – perhaps I will “get it” at that time.
Conditional Pay-Off
I am going to work with the following definition of pay-off throughout and work with skewed distributions with the tail out to the right. The same principles apply if the tail is out to the left and we talk about an expected value between – ∞ and κ.
where, fX(x) is the probability density function of random variable “X”. I am only going to look at continuous distributions.
Cauchy Distribution
pdf:
Wikipedia says the following:
The Cauchy distribution is often used in statistics as the canonical example of a “pathological” distribution since both its mean and its variance are undefined.
So now I am curious. How does it behave in the tail? Let’s see …
We need only investigate the numerator …
So E is infinite, and so is E / κ. So I guess λ is infinite?
Normal Distribution
pdf:
Expected pay-off:
Translating the function so the mean is zero, and adding it back later.
Where F(k) is the cdf of the distribution, so 1 – F(k) is the area under the right tail of the pdf.
Integrating the numerator …
Finally:
Now, to illustrate Taleb’s point we can divide E / κ and see what happens as κ gets larger and larger:
E / κ = λ is clearly heading to one. Since the mean is 3 and sd is 2, the value on the x-axis of 12 is equivalent to 4.5 standard deviations from the mean. This gives a sense of how quickly the normal distribution approaches the condition λ = 1. It very rapidly approaches 1 + μ / κ. If μ were zero, the approach to λ = 1 would be even quicker.
Exponential Distribution
pdf:
Expected pay-off:
Integrating by parts:
and
The chart at the right illustrates how E / κ = 1 + λ / κ behaves with κ.
Obviously, as κ increases E / κ tends to 1. (Note the “λ” here is NOT Taleb’s λ it is the rate constant in the exponential distribution). In this case the rate, λ, was 2, so the standard deviation would be 1/2. As you would expect, E / κ is approaching 1 more slowly than for the normal distribution which contains the exp(-x^2) term rather than exp(-x). A value of κ = 7 is 13 standard deviations above the mean (1/2).
Gamma Distribution
pdf:
Expected pay-off:
Where F(k) is the cdf of the distribution, so 1 – F(k) is the area under the right tail of the pdf.
Integrating the numerator by parts:
so, substituting θ for 1/β so we use scale rather than rate …

Weibull Distribution
pdf:
Expected pay-off:
Substitute
:
Where Γ(α, β) is the upper incomplete gamma function. In “R” one can access the incomplete gamma functions via the gamma cumulative distribution function (pgamma(x, shape, scale, lower.tail)):
Substituting:
The only problem is this doesn’t seem to work – if anyone can see what I have wrong please let me know.
In the mean time I created a numerical integration approach which seems to work but is not going to be accurate. It generates the adjacent chart for E / κ. It appears to be approaching 1 in an asymptotic fashion, but I can’t be sure until I get the equations above working!
Pareto Distribution
pdf:
Expected pay-off:



Here is the R script containing all the functions needed to explore the material above:
lambdaNormal <- function(mean=0, sd=1){ xSeq <- seq(qnorm(.001, mean, sd), qnorm(0.999, mean, sd), 0.001) dev.new() plot(xSeq, dnorm(xSeq, mean, sd), t="l", main=paste0("Normal pdf (mean=", mean, " st. dev.=", sd, ")"), xlab="X", ylab="Probability density") kSeq <- seq(qnorm(.75, mean, sd), qnorm(0.999999, mean, sd), 0.01) eNorm <- mean + sd * exp(-(kSeq - mean)^2/2/sd^2) / sqrt(2*pi) / pnorm(kSeq, mean, sd, lower.tail=F) normLambda <- eNorm / kSeq dev.new() plot(kSeq, normLambda, t="l", main="Expected Tail Value (x >= k) / Tail (k)", sub=paste0("Distribution: Normal (mean=", mean, ", std dev=", sd, " )"), ylab="E[X|x>k] / k", xlab="k", xlim=c(min(kSeq), max(kSeq)), ylim=c(0.95, max(normLambda))) abline(h=1, col="red") } lambdaExponential <- function(rate=1){ xSeq <- seq(qexp(.001, rate), qexp(0.999, rate), 0.001) dev.new() plot(xSeq, dexp(xSeq, rate), t="l", main=paste0("Exponential pdf (rate=", rate, " )"), xlab="X", ylab="Probability Density") kSeq <- seq(qexp(.75, rate), qexp(0.999999, rate), 0.01) eExp <- kSeq + rate expLambda <- eExp / kSeq dev.new() plot(kSeq, expLambda, t="l", main="Expected Tail Value (x >= k) / Tail (k)", sub=paste0("Distribution: Exponential (rate=", rate, " )"), ylab="E[X|x>k] / k", xlab="k", xlim=c(min(kSeq), max(kSeq)), ylim=c(0.95, max(expLambda))) abline(h=1, col="red") } lambdaGamma <- function(shape=1, scale=1){ xSeq <- seq(qgamma(.001, shape, scale=scale), qgamma(0.999, shape, scale=scale), 0.001) dev.new() plot(xSeq, dgamma(xSeq, shape=shape, scale=scale), t="l", main=paste0("Gamma pdf (shape=", shape, ", scale=", scale, " )"), xlab="X", ylab="Probability Density") kSeq <- seq(qgamma(.75, shape, scale=scale), qgamma(0.999999, shape, scale=scale), 0.01) eGamma <- shape * scale + (kSeq^shape) * exp(-kSeq / scale) / gamma(shape) / scale^(shape - 1) / pgamma(kSeq, shape, scale=scale, lower.tail=F) gammaLambda <- eGamma / kSeq dev.new() plot(kSeq, gammaLambda, t="l", main="Expected Tail Value (x >= k) / Tail (k)", sub=paste0("Distribution: Gamma (shape=", shape, ", scale=", scale, " )"), ylab="E[X|x>k] / k", xlab="k", xlim=c(min(kSeq), max(kSeq)), ylim=c(0.95, max(gammaLambda))) abline(h=1, col="red") } eTailPareto4 <- function(x, increment=0.001, mu=0, sigma=1, gamma=0.75, alpha=1.5){ expectedValue <- ePareto4(mu, sigma, gamma, alpha, T) xRange <- seq(0, x, increment) ifelse(is.na(expectedValue), NA, (expectedValue - increment * sum(xRange * dPareto4(xRange, mu, sigma, gamma, alpha, T))) / (1 - pPareto4(x, mu, sigma, gamma, alpha, T))) } lambdaPareto4 <- function(mu=0, sigma=1, gamma=0.75, alpha=1.5){ # Pareto4 - have to do integration numerically xSeq <- seq(mu-1, qPareto4(p=0.95, mu, sigma, gamma, alpha, T), 0.001) dev.new() plot(xSeq, dPareto4(xSeq, mu, sigma, gamma, alpha, T), t="l", main=paste0("Pareto pdf (loc.=", mu, ", scale=", sigma, ", inequality=", gamma, ", tail index=", alpha, " )"), xlab="X", ylab="Probability Density") if (gamma < alpha){ kSeq=seq(qPareto4(0.9, mu, sigma, gamma, alpha, T), qPareto4(0.999, mu, sigma, gamma, alpha, T), 0.001) ePareto <- sapply(kSeq, eTailPareto4, sigma=sigma, gamma=gamma, alpha=alpha) pareto4Lambda <- ePareto / kSeq dev.new() plot(kSeq, pareto4Lambda, t="l", main="Expected Tail Value (x >= k) / Tail (k)", sub=paste0("Distribution: Pareto (loc.=", mu, ", scale=", sigma, ", inequality=", gamma, ", tail index=", alpha, " )"), ylab="E[X|x>k] / k", xlab="k", xlim=c(min(kSeq), max(kSeq)), ylim=c(min(pareto4Lambda) * 0.9, max(pareto4Lambda))) }else{ message("Gamma is greater than or equal to alpha - loss is undefined") } } eTailWeibull <- function(x, increment=0.001, shape=1, scale=1){ expectedValue <- scale * gamma(1 + 1 / shape) xRange <- seq(0, x, increment) (expectedValue - increment * sum(xRange * dweibull(xRange, shape, scale))) / pweibull(x, shape, scale, lower.tail=F) } igamma <- function(s, x=0, upper=T) gamma(s) * pgamma(x, shape=s, scale=1, lower.tail=!upper) lambdaWeibull <- function(shape=1, scale=1){ xSeq <- seq(0, qweibull(0.999, shape, scale), 0.001) dev.new() plot(xSeq, dweibull(xSeq, shape, scale), t="l", main=paste0("Weibull pdf (shape=", shape, ", scale=", scale, " )"), xlab="X", ylab="Probability Density") kSeq <- seq(qweibull(0.99, shape, scale), qweibull(0.9999, shape, scale), 0.0001) # This works ...evalue at 2 ~ 2.3. at 10 ~10.6 neWeibull <- sapply(kSeq, eTailWeibull, shape=shape, scale=scale) nWeibullLambda <- neWeibull / kSeq dev.new() plot(kSeq, nWeibullLambda, t="l", main="Expected Tail Value (x >= k) / Tail (k)", sub=paste0("Distribution: Numeric Weibull (shape=", shape, ", scale=", scale, " )"), ylab="E[X|x>k] / k", xlab="k", xlim=c(min(kSeq), max(kSeq)), ylim=c(min(nWeibullLambda) * 0.9, max(nWeibullLambda))) abline(h=1, col="red") } # Show that as k -> +infinity, E[X | x >= K+] -> Lambda.K+ for fat tails, but -> k+ for thin tailed # List which distributions to view: normal, exponential, gamma, pareto4, weibull view <- c() if ("normal" %in% view){ # Normal mu <- 0 stdDev <- 2 lambdaNormal(mu, stdDev) } if("exponential" %in% view){ # Exponential dist lambda <- 2 lambdaExponential(lambda) } if ("gamma" %in% view){ # Gamma: shape <- 5/2 scale <- 1.5 lambdaGamma(shape, scale) } if("pareto4" %in% view){ # Pareto4 - have to do integration numerically location <- 0 scale <- 1 inequality <- 0.75 tailIndex <- 1.5 lambdaPareto4(location, scale, inequality, tailIndex) } if("weibull" %in% view){ # Weibull shape <- 1.5 scale <- 2 lambdaWeibull(shape, scale) }
Share
If you found this post informative, please share it!