[R] Lambert (1992) simulation

Achim Zeileis Achim.Zeileis at uibk.ac.at
Fri Apr 27 08:53:39 CEST 2012


On Thu, 26 Apr 2012, Christopher Desjardins wrote:

> Hi,
> I am trying to replicate Lambert (1992)'s simulation with zero-inflated
> Poisson models. The citation is here:
>
> @article{lambert1992zero,
> Author = {Lambert, D.},
> Journal = {Technometrics},
> Pages = {1--14},
> Publisher = {JSTOR},
> Title = {Zero-inflated {P}oisson regression, with an application to defects
> in manufacturing},
> Year = {1992}}
>
> Specifically I am trying to recreate Table 2. But my estimates for Gamma
> are not working out. Any ideas why?

Your implementation of the inverse logit link is wrong, it should be 
exp(x)/(1 + exp(x)) and not exp(x)/exp(1 + x). In R I never code this by 
hand but either use qlogis()/plogis() or make.link("logit").

Your setting resulting in an almost constant probability of zero inflation 
and hence gamma was completely off.

Below is my cleaned up code which nicely replicates the results for n = 
100. The other two would require additional work because one would need to 
catch non-convergence etc.

hth,
Z

## data-generating process
dgp <- function(nobs = 100) {
   gamma <- c(-1.5, 2)
   beta <- c(1.5, -2)
   x <- seq(0, 1, length.out = nobs)
   lambda <- exp(beta[1] + beta[2] * x)
   p <- plogis(gamma[1] + gamma[2] * x)
   y <- ifelse(runif(nobs) <= p, 0, rpois(nobs, lambda = lambda))
   data.frame(y = y, x = x)
}

## simulation of coefficients and standard errors
sim <- function(nrep = 2000, ...) {
   onesim <- function(i) {
     d <- dgp(...)
     m <- zeroinfl(y ~ x, data = d)
     c(coef(m), sqrt(diag(vcov(m))))
   }
   t(sapply(1:nrep, onesim))
}

## run simulation #3
library("pscl")
set.seed(1)
cfse <- sim(nobs = 100)

## mean coefficient estimates
apply(cfse[, 1:4], 2, mean)

## median coefficient estimates
apply(cfse[, 1:4], 2, median)

## sd of coefficient estimates
apply(cfse[, 1:4], 2, sd)

## mean of the standard deviation estimates from observed information
apply(cfse[, 5:8], 2, mean)



> Please cc me on a reply!
> Thanks,
> Chris
>
> ## ZIP simulations based on Lambert (1992)'s conditions
>
> # Empty workspace
> rm(list=ls())
>
> # Load zero-inflation package
> library(pscl)
>
> # Simulation conditions #3
> NumSimulations=2000
> X=seq(from=0,to=1,length.out=N)
> Model.Matrix=cbind(rep(1,length(X)),X)
> Gamma=c(-1.5,2)
> Beta=c(1.5,-2)
> P=exp(Model.Matrix%*%Gamma)/exp(1+Model.Matrix%*%Gamma)
> Lambda=exp(Model.Matrix%*%Beta)
> CoefSimulations=matrix(nrow=NumSimulations,ncol=2*dim(Model.Matrix)[2])
>
> for(i in 1 : NumSimulations){
> Lambda.Draw=rpois(N,Lambda)
> U=runif(N)
> Y=ifelse(U<=P,0,Lambda.Draw)
> CoefSimulations[i,]=coef(zeroinfl(Y~X|X))
> }
>
> # What were the estimates?
> colMeans(CoefSimulations) # My gamma estimates aren't even close ...
>
> 	[[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list