Problem

Given a random variable \(X \sim \mathcal{N}(\mu,\sigma^2)\), find a transformation \(f: X \rightarrow Y\), such that \(Y \sim Uniform(a,b)\).

Solution

Let \(\Phi_X(\cdot)\) the cumulative distribution function of \(X\).

\[ \begin{eqnarray} Z \equiv \frac{X - \mu}{\sigma};\quad Z &\sim& \mathcal{N}(0;1) \\ \Phi_{Z}\left(\frac{X-\mu}{\sigma}\right) &\sim& Uniform(0;1) \\ (b-a) \Phi_{Z}\left(\frac{X-\mu}{\sigma}\right) &\sim& Uniform(0,b-a) \\ a + (b-a) \Phi_{Z}\left(\frac{X-\mu}{\sigma}\right) &\sim& Uniform(a,b) \end{eqnarray} \]

In conclusion, \(Y \equiv a + (b-a) \Phi_X\left(\frac{X-\mu}{\sigma}\right)\).

Computational demonstration

norm2unif = function(x, mu = 0, sigma = 1, min = 0, max = 1, use.empirical.mean = FALSE, use.empirical.sd = FALSE) {
    if (use.empirical.mean) mu = mean(x)
    if (use.empirical.sd) sigma = sd(x)
    x_std = (x-mu)/sigma
    x_std.cdf = ecdf(x_std) # the empirical cumulative distribution function of standardized x
    return((max-min)*x_std.cdf(x_std) + min)
}

Using exact parameters

Standard distributions

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Non-standard distributions

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Using empirical parameters

Standard distributions

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Non-standard distributions

## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.