library(RTMB) tick <- read.table("Elston2001_tickdata.txt", header=TRUE, colClasses=c("factor","numeric","factor","numeric","factor","factor")) tick$cHEIGHT <- tick$HEIGHT-mean(tick$HEIGHT) par <- list(alpha=0, beta=numeric(nlevels(tick$YEAR)), logSdI=0, logSdB=0, logSdL=0, zI=numeric(nlevels(tick$INDEX)), zB=numeric(nlevels(tick$BROOD)), zL=numeric(nlevels(tick$LOCATION))) f <- function(par){ getAll(par,tick) jnll <- 0 jnll <- jnll - sum(dnorm(zI, 0, sd=exp(logSdI),log=TRUE)) jnll <- jnll - sum(dnorm(zB, 0, sd=exp(logSdB),log=TRUE)) jnll <- jnll - sum(dnorm(zL, 0, sd=exp(logSdL),log=TRUE)) logLambda <- alpha*cHEIGHT+beta[YEAR]+zI[INDEX]+zB[BROOD]+zL[LOCATION] jnll <- jnll - sum(dpois(TICKS, exp(logLambda), log=TRUE)) jnll } obj <- MakeADFun(f, par, random=c("zI","zB","zL"), silent=TRUE) fit <- nlminb(obj$par, obj$fn, obj$gr) # same as: # glmmTMB::glmmTMB(TICKS ~ -1+as.factor(YEAR)+cHEIGHT+(1|LOCATION)+(1|BROOD)+(1|INDEX), family=poisson, data=tick)