Maximum likelihood estimation of the 3-parameter Makeham distribution.
makeham(lscale = "loglink", lshape = "loglink", lepsilon = "loglink",
iscale = NULL, ishape = NULL, iepsilon = NULL,
gscale = exp(-5:5),gshape = exp(-5:5), gepsilon = exp(-4:1),
nsimEIM = 500, oim.mean = TRUE, zero = NULL, nowarning = FALSE)
An object of class "vglmff"
(see vglmff-class
).
The object is used by modelling functions
such as vglm
,
and vgam
.
Logical. Suppress a warning? Ignored for VGAM 0.9-7 and higher.
Parameter link functions applied to the
shape parameter shape
,
scale parameter scale
, and
other parameter epsilon
.
All parameters are treated as positive here
(cf. dmakeham
allows epsilon = 0
, etc.).
See Links
for more choices.
Optional initial values.
A NULL
means a value is computed internally.
A value must be given for iepsilon
currently, and this
is a sensitive parameter!
See CommonVGAMffArguments
.
See CommonVGAMffArguments
.
Argument probs.y
is used only when imethod = 2
.
To be currently ignored.
T. W. Yee
A lot of care is needed because
this is a rather difficult distribution for parameter estimation,
especially when the shape parameter is large relative to the
scale parameter.
If the self-starting initial values fail then try experimenting
with the initial value arguments, especially iepsilon
.
Successful convergence depends on having very good initial values.
More improvements could be made here.
Also, monitor convergence by setting trace = TRUE
.
A trick is to fit a gompertz
distribution and use
it for initial values; see below.
However, this family function is currently numerically fraught.
The Makeham distribution, which adds another parameter
to the Gompertz distribution,
has cumulative distribution function
scale
,
and
Simulated Fisher scoring is used and multiple responses are handled.
dmakeham
,
gompertz
,
simulate.vlm
.
if (FALSE) set.seed(123)
mdata <- data.frame(x2 = runif(nn <- 1000))
mdata <- transform(mdata, eta1 = -1,
ceta1 = 1,
eeta1 = -2)
mdata <- transform(mdata, shape1 = exp(eta1),
scale1 = exp(ceta1),
epsil1 = exp(eeta1))
mdata <- transform(mdata,
y1 = rmakeham(nn, shape = shape1, scale = scale1, eps = epsil1))
# A trick is to fit a Gompertz distribution first
fit0 <- vglm(y1 ~ 1, gompertz, data = mdata, trace = TRUE)
fit1 <- vglm(y1 ~ 1, makeham, data = mdata,
etastart = cbind(predict(fit0), log(0.1)), trace = TRUE)
coef(fit1, matrix = TRUE)
summary(fit1)
Run the code above in your browser using DataLab