Learn R Programming

VGAM (version 1.0-5)

posnormal: Positive Normal Distribution Family Function

Description

Fits a positive (univariate) normal distribution.

Usage

posnormal(lmean = "identitylink", lsd = "loge",
          eq.mean = FALSE, eq.sd = FALSE,
          gmean = exp((-5:5)/2), gsd = exp((-1:5)/2),
          imean = NULL, isd = NULL, probs.y = 0.10, imethod = 1,
          nsimEIM = NULL, zero = "sd")

Arguments

lmean, lsd

Link functions for the mean and standard deviation parameters of the usual univariate normal distribution. They are \(\mu\) and \(\sigma\) respectively. See Links for more choices.

gmean, gsd, imethod

See CommonVGAMffArguments for more information. gmean and gsd currently operate on a multiplicative scale, on the sample mean and the sample standard deviation, respectively.

imean, isd

Optional initial values for \(\mu\) and \(\sigma\). A NULL means a value is computed internally. See CommonVGAMffArguments for more information.

eq.mean, eq.sd

See CommonVGAMffArguments for more information. The fact that these arguments are supported results in default constraint matrices being a permutation of the identity matrix (effectively trivial constraints).

zero, nsimEIM, probs.y

See CommonVGAMffArguments for information.

Value

An object of class "vglmff" (see vglmff-class). The object is used by modelling functions such as vglm, and vgam.

Warning

It is recommended that trace = TRUE be used to monitor convergence; sometimes the estimated mean is -Inf and the estimated mean standard deviation is Inf, especially when the sample size is small. Under- or over-flow may occur if the data is ill-conditioned.

Details

The positive normal distribution is the ordinary normal distribution but with the probability of zero or less being zero. The rest of the probability density function is scaled up. Hence the probability density function can be written $$f(y) = \frac{1}{\sqrt{2\pi} \sigma} \exp\left( -\frac12 (y-\mu)^2 / \sigma^2 \right) / \left[ 1-\Phi(-\mu/ \sigma) \right]$$ where \(\Phi()\) is the cumulative distribution function of a standard normal (pnorm). Equivalently, this is $$f(y) = \frac{1}{\sigma} \frac{\phi((y-\mu) / \sigma)}{ 1-\Phi(-\mu/ \sigma)}.$$ where \(\phi()\) is the probability density function of a standard normal distribution (dnorm).

The mean of \(Y\) is $$E(Y) = \mu + \sigma \frac{\phi(-\mu/ \sigma)}{ 1-\Phi(-\mu/ \sigma)}. $$ This family function handles multiple responses.

See Also

uninormal, tobit.

Examples

Run this code
# NOT RUN {
pdata <- data.frame(Mean = 1.0, SD = exp(1.0))
pdata <- transform(pdata, y = rposnorm(n <- 1000, m = Mean, sd = SD))

# }
# NOT RUN {
with(pdata, hist(y, prob = TRUE, border = "blue",
  main = paste("posnorm(m =", Mean[1], ", sd =", round(SD[1], 2),")"))) 
# }
# NOT RUN {
fit <- vglm(y ~ 1, posnormal, data = pdata, trace = TRUE)
coef(fit, matrix = TRUE)
(Cfit <- Coef(fit))
mygrid <- with(pdata, seq(min(y), max(y), len = 200))  # Add the fit to the histogram
# }
# NOT RUN {
lines(mygrid, dposnorm(mygrid, Cfit[1], Cfit[2]), col = "orange")
# }

Run the code above in your browser using DataLab