posnormal {VGAM} | R Documentation |
Positive Normal Distribution Family Function
Description
Fits a positive (univariate) normal distribution.
Usage
posnormal(lmean = "identitylink", lsd = "loglink",
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 |
gmean , gsd , imethod |
See |
imean , isd |
Optional initial values for |
eq.mean , eq.sd |
See |
zero , nsimEIM , probs.y |
See |
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.
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.
Note
The response variable for this family function is the same as
uninormal
except positive values are required.
Reasonably good initial values are needed.
The distribution of the reciprocal of a positive normal random variable is known as an alpha distribution.
Author(s)
Thomas W. Yee
See Also
Examples
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),")")))
## End(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))
## Not run: lines(mygrid, dposnorm(mygrid, Cfit[1], Cfit[2]), col = "red")