- Story. The Half-Normal distribution is a Gaussian distribution with zero mean truncated to only have nonzero probability for positive real numbers.
- Parameters. Strictly speaking, the Half-Normal is parametrized by a single positive parameter \(σ\). We could, however, translate it so that the truncated Gaussian has a maximum at \(μ\) and only values greater than or equal to \(μ\) have nonzero probability.
- Probability density function.
\(\begin{align}
f(y;\mu, \sigma) = \left\{\begin{array}{ccc}
\frac{2}{\sqrt{2\pi \sigma^2}}\,\mathrm{e}^{-(y-\mu)^2/2\sigma^2} & & y \ge \mu\\
0 && \text{otherwise}
\end{array}\right.
\end{align}\)
- Support. The Half-Normal distribution is supported on the set \([μ,∞)\). Usually, we have \(μ=0\), in which case the Half-Normal distribution is supported on the set of nonnegative real numbers.
- Usage
Package |
Syntax |
NumPy |
np.random.normal(mu, sigma) |
SciPy |
scipy.stats.halfnorm(mu, sigma) |
Stan |
real<lower=mu> y; y ~ normal(mu, sigma) |
- Notes.
- In Stan, a Half-Normal is defined by putting bounds on the variable and then using a Normal distribution.
- The Half-Normal distibution is a useful prior for nonnegative parameters that should not be too large and may be very close to zero.
params = [dict(name='µ', start=-0.5, end=0.5, value=0, step=0.01),
dict(name='σ', start=0.1, end=1.0, value=0.2, step=0.01)]
app = distribution_plot_app(x_min=-0.5,
x_max=2,
scipy_dist=st.halfnorm,
params=params,
x_axis_label='y',
title='Half-Normal')
bokeh.io.show(app, notebook_url=notebook_url)