Estimates the three parameters of a mixture of two Poisson distributions by maximum likelihood estimation.
1 2 3
Link functions for the parameter phi and
Initial value for phi, whose value must lie between 0 and 1.
Optional initial value for lambda1 and
lambda2. These values must be positive.
The default is to compute initial values internally using
Vector with two values giving the probabilities relating to the sample
quantiles for obtaining initial values for lambda1
The two values are fed in as the
The probability function can be loosely written as
P(Y=y) = phi * Poisson(lambda1) + (1-phi) * Poisson(lambda2)
where phi is the probability an observation belongs to the first group, and y=0,1,2,.... The parameter phi satisfies 0 < phi < 1. The mean of Y is phi*lambda1 + (1-phi)*lambda2 and this is returned as the fitted values. By default, the three linear/additive predictors are (logit(phi), log(lambda1), log(lambda2))^T.
An object of class
The object is used by modelling functions such as
This VGAM family function requires care for a successful
In particular, good initial values are required because of the presence
of local solutions. Therefore running this function with several
different combinations of arguments such as
qmu is highly recommended. Graphical methods such
hist can be used as an aid.
With grouped data (i.e., using the
one has to use a large value of
see the example below.
This VGAM family function is experimental and should be used with care.
The response must be integer-valued since
Fitting this model successfully to data can be difficult due to local
solutions and ill-conditioned data. It pays to fit the model several
times with different initial values, and check that the best fit
looks reasonable. Plotting the results is recommended. This function
works better as lambda1 and lambda2
become more different.
The default control argument
trace = TRUE is to encourage
T. W. Yee
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
## Not run: # Example 1: simulated data nn <- 1000 mu1 <- exp(2.5) # Also known as lambda1 mu2 <- exp(3) (phi <- logitlink(-0.5, inverse = TRUE)) mdata <- data.frame(y = rpois(nn, ifelse(runif(nn) < phi, mu1, mu2))) mfit <- vglm(y ~ 1, mix2poisson, data = mdata) coef(mfit, matrix = TRUE) # Compare the results with the truth round(rbind('Estimated' = Coef(mfit), 'Truth' = c(phi, mu1, mu2)), digits = 2) ty <- with(mdata, table(y)) plot(names(ty), ty, type = "h", main = "Orange=estimate, blue=truth", ylab = "Frequency", xlab = "y") abline(v = Coef(mfit)[-1], lty = 2, col = "orange", lwd = 2) abline(v = c(mu1, mu2), lty = 2, col = "blue", lwd = 2) # Example 2: London Times data (Lange, 1997, p.31) ltdata1 <- data.frame(deaths = 0:9, freq = c(162, 267, 271, 185, 111, 61, 27, 8, 3, 1)) ltdata2 <- data.frame(y = with(ltdata1, rep(deaths, freq))) # Usually this does not work well unless nsimEIM is large Mfit <- vglm(deaths ~ 1, weight = freq, data = ltdata1, mix2poisson(iphi = 0.3, il1 = 1, il2 = 2.5, nsimEIM = 5000)) # This works better in general Mfit <- vglm(y ~ 1, mix2poisson(iphi = 0.3, il1 = 1, il2 = 2.5), data = ltdata2) coef(Mfit, matrix = TRUE) Coef(Mfit) ## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.