3
$\begingroup$

I have to generate random numbers for my algorithm based on probability distributions. I want a distribution which has heavy tails and is unskewed, which can produce numbers far away from location parameter. There should be a parameter to control the tail heaviness (e.g., like levy distribution where alpha determines tail heaviness).

I have identified the t-distribution (for smaller degrees of freedom) and the laplace distribution as two possibilities.

  • Are there any reasons to prefer t or laplace for my purpose?
  • Apart from t-distribution and laplace distribution, is there any distribution except cauchy or levy that would be useful for my purpose?
$\endgroup$
  • 6
    $\begingroup$ "unskwed" = "unskewed"? Symmetric? A problem with this question is that it requests a quantitative answer (a distribution or family of them) but supplies no quantitative criteria for selecting among the infinitely many possibilities. How "heavy" should the tails be? What exactly is the "purpose"? ("Algorithm" is far too general to be a useful description.) You might find this search useful. $\endgroup$ – whuber May 17 '11 at 17:27
4
$\begingroup$

The Laplace (aka double exponential) distribution has relatively light tails - exponential in fact :). The Laplace and t/Cauchy distributions are part of a larger family of scale mixtures of normals, which are distributions that can be written as an infinite mixture like so:

$$p(x) = \int Nor(x; 0, r^2s^2)p(s^2)ds^2$$

$r$ is an additional scale parameter; it can also be absorbed into $p(s^2)$. The t family have inverse gamma distributions on $s^2$, the Laplace distribution has an exponential mixing distribution on $s^2/2$. The parameters of $p(s^2)$ will control the scale and tail behavior of the resulting distribution. Since it sounds like you only need to sample from this distribution, you can basically pick any mixing distribution you like. A recommendation for which distribution would work well requires more information about your problem, for the reasons @whuber gave.

$\endgroup$
4
$\begingroup$

Heavy-tail Lambert W x F distributions seem to be what you are looking for (disclaimer: I am the author). They arise from a parametric, non-linear transformation of a random variable (RV) $X \sim F$, to a heavy-tailed version $Y \sim \text{Lambert W} \times F$. For $F$ being Gaussian they reduce to Tukey's $h$ distribution.

They have one parameter $\delta \geq 0$ that regulates the degree of tail heaviness (you can also choose different left and right heavy tails). In its most basic form it transforms a standard Normal $U \sim \mathcal{N}(0,1)$ to a Lambert W $\times$ Gaussian $Z$ by $$ Z = U \exp\left(\frac{\delta}{2} U^2\right) $$

If $\delta > 0$ $Z$ has heavier tails than $U$; for $\delta = 0$ $Z$ falls back to your initial RV $U$.

If you don't want to use the Gaussian distribution as your baseline, you can just create other Lambert W versions of your favorite distributions, e.g. t, uniform, gamma, exponential, beta, ... However, for the purpose of heavy-tails the Gaussian seems to be the obvious baseline reference.

Since this heavy-tail generation is based on transformations of RVs/data rather than a manipulation of cdfs or pdfs, it is very convenient to implement: just use your code to simulate any standard RV, add one line that transforms it, and then you have a random sample from the heavy-tail version of your initial RV.

In R this becomes (using the LambertW package)

library(LambertW)
set.seed(1)
zz = rLambertW(n=1000, distname = "normal", beta = c(0,1), delta = 0.5)
normfit(zz)

You can also fit the best model to the data using a maximum likelihood estimator (MLE)

model = MLE_LambertW(zz, distname = "normal", type = "h")
summary(model)
plot(model)
$\endgroup$
1
$\begingroup$

Log-Normal can also be used as it is rightly skewed. Important thing is that it gives you the MLE of the parameters in closed form.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.