cens.normal {VGAM} | R Documentation |
Censored Normal Distribution
Description
Maximum likelihood estimation for the normal distribution with left and right censoring.
Usage
cens.normal(lmu = "identitylink", lsd = "loglink", imethod = 1,
zero = "sd")
Arguments
lmu , lsd |
Parameter link functions
applied to the mean and standard deviation parameters.
See |
imethod |
Initialization method. Either 1 or 2, this specifies two methods for obtaining initial values for the parameters. |
zero |
A vector, e.g., containing the value 1 or 2; if so,
the mean or standard deviation respectively are modelled
as an intercept only.
Setting |
Details
This function is like uninormal
but handles
observations that are left-censored (so that the true value
would be less than the observed value) else right-censored
(so that the true value would be greater than the observed
value). To indicate which type of censoring, input extra
= list(leftcensored = vec1, rightcensored = vec2)
where
vec1
and vec2
are logical vectors the same length
as the response.
If the two components of this list are missing then the logical
values are taken to be FALSE
. The fitted object has
these two components stored in the extra
slot.
Value
An object of class "vglmff"
(see
vglmff-class
). The object is used by modelling
functions such as vglm
, and vgam
.
Note
This function, which is an alternative to tobit
,
cannot handle a matrix response
and uses different working weights.
If there are no censored observations then
uninormal
is recommended instead.
Author(s)
T. W. Yee
See Also
tobit
,
uninormal
,
double.cens.normal
.
Examples
## Not run:
cdata <- data.frame(x2 = runif(nn <- 1000)) # ystar are true values
cdata <- transform(cdata, ystar = rnorm(nn, m = 100 + 15 * x2, sd = exp(3)))
with(cdata, hist(ystar))
cdata <- transform(cdata, L = runif(nn, 80, 90), # Lower censoring points
U = runif(nn, 130, 140)) # Upper censoring points
cdata <- transform(cdata, y = pmax(L, ystar)) # Left censored
cdata <- transform(cdata, y = pmin(U, y)) # Right censored
with(cdata, hist(y))
Extra <- list(leftcensored = with(cdata, ystar < L),
rightcensored = with(cdata, ystar > U))
fit1 <- vglm(y ~ x2, cens.normal, data = cdata, crit = "c", extra = Extra)
fit2 <- vglm(y ~ x2, tobit(Lower = with(cdata, L), Upper = with(cdata, U)),
data = cdata, crit = "c", trace = TRUE)
coef(fit1, matrix = TRUE)
max(abs(coef(fit1, matrix = TRUE) -
coef(fit2, matrix = TRUE))) # Should be 0
names(fit1@extra)
## End(Not run)