View source: R/family.normal.R
posnormal | R Documentation |
Fits a positive (univariate) normal distribution.
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")
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 |
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.
An object of class "vglmff"
(see vglmff-class
).
The object is used by modelling functions
such as vglm
,
and vgam
.
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.
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.
Thomas W. Yee
uninormal
,
tobit
.
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")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.