## ----setopts,echo=FALSE,message=FALSE, eval = TRUE----------------------------
library("knitr")
opts_chunk$set(fig.width=5,fig.height=5,
               out.width="0.8\\textwidth",
               echo = TRUE, error = FALSE,
               eval = identical(Sys.getenv("NOT_CRAN"), "true"))
Rver <- paste(R.version$major,R.version$minor,sep=".")
used.pkgs <- c("glmmTMB","bbmle")  ## packages to report below

## ----pkgversions, echo=FALSE, eval=TRUE---------------------------------------
pkgver <- vapply(sort(used.pkgs),function(x) as.character(packageVersion(x)),"")
print(pkgver,quote=FALSE)

## ----citation,eval=FALSE,echo=FALSE-------------------------------------------
# print(citation("glmmTMB"),style="latex")

## ----pkgs,message=FALSE, eval=TRUE--------------------------------------------
library("glmmTMB")
library("bbmle")    ## for AICtab
library("ggplot2")
## cosmetic
theme_set(theme_bw()+
  theme(panel.spacing=grid::unit(0,"lines")))

## ----owltransform,warning=FALSE-----------------------------------------------
# Owls <- transform(Owls,
#                   Nest=reorder(Nest,NegPerChick),
#                   NCalls=SiblingNegotiation,
#                   FT=FoodTreatment)

## ----owlplot1,echo=FALSE,message=FALSE,warning=FALSE,eval=FALSE---------------
# G0 <- ggplot(Owls,aes(x=reorder(Nest,NegPerChick),
#                       y=NegPerChick))+
#   labs(x="Nest",y="Negotiations per chick")+coord_flip()+
#   facet_grid(FoodTreatment~SexParent)
# G0+stat_sum(aes(size=..n..),alpha=0.5)+
#       scale_size_continuous(name="# obs",
#                             breaks=seq(1,9,by=2))+
#     theme(axis.title.x=element_text(hjust=0.5,size=12),
#          axis.text.y=element_text(size=7))

## ----glmmTMBfit---------------------------------------------------------------
# fit_zipoisson <- glmmTMB(NCalls~(FT+ArrivalTime)*SexParent+
#                                      offset(log(BroodSize))+(1|Nest),
#                                      data=Owls,
#                                      ziformula=~1,
#                                      family=poisson)

## ----zipoisssum---------------------------------------------------------------
# summary(fit_zipoisson)

## ----glmmTMBnbinomfit---------------------------------------------------------
# fit_zinbinom <- update(fit_zipoisson,family=nbinom2)

## ----glmmTMBnbinom1fit--------------------------------------------------------
# fit_zinbinom1 <- update(fit_zipoisson,family=nbinom1)

## ----glmmTMBnbinom1vfit-------------------------------------------------------
# fit_zinbinom1_bs <- update(fit_zinbinom1,
#                            . ~ (FT+ArrivalTime)*SexParent+
#                                BroodSize+(1|Nest))

## ----aictab-------------------------------------------------------------------
# AICtab(fit_zipoisson,fit_zinbinom,fit_zinbinom1,fit_zinbinom1_bs)

## ----glmmTMBnbinomhfit--------------------------------------------------------
# fit_hnbinom1 <-  update(fit_zinbinom1_bs,
#                         ziformula=~.,
#                         data=Owls,
#                         family=truncated_nbinom1)

## ----hurdle_AIC---------------------------------------------------------------
# AICtab(fit_zipoisson,fit_zinbinom,
#        fit_zinbinom1,fit_zinbinom1_bs,
#        fit_hnbinom1)

## ----contraception_sum,echo=FALSE, eval=TRUE----------------------------------
data("Contraception",package="mlmRev")
nc <- nrow(Contraception)
nl <- length(levels(Contraception$district))
load("contraceptionTimings.rda")
meandiff <- mean(with(tmatContraception,
                      time[pkg=="glmer"]/time[pkg=="glmmTMB"]))

## ----contraception,echo=FALSE,warning=FALSE,fig.cap="Timing for fitting the replicated Contraception data set."----
# ## NaN from geom_smooth because glmmADMB only has two points/
# ## can't compute confidence intervals
# ## suppressWarnings() doesn't actually work within ggplot ...
# ## instead set/reset options("warn")
# op <- options(warn = -1)
# ggplot(tmatContraception,
#        aes(n, time, colour=pkg)) + geom_point() +
#     scale_y_log10(breaks=c(1,2,5,10,20,50,100)) +
#     scale_x_log10(breaks=c(1,2,4,10,20,40)) +
#     labs(x="Replication (x 1934 obs.)",y="Elapsed time (s)") +
#     geom_smooth(method="lm", formula = y ~ x) +
#     scale_colour_brewer(palette="Set1")
# options(op)

## ----insteval,echo=FALSE,warning=FALSE,fig.cap="Timing for fitting subsets of the InstEval data set.", eval = TRUE----
load("InstEvalTimings.rda")
n_InstEval <- 73421L  ## seems silly to require lme4 just to get this number
meandiff_inst2 <- with(tmatInstEval,
     time[pkg=="lmer"]/time[pkg=="glmmTMB"])
ggplot(tmatInstEval,aes(n,time,colour=pkg))+geom_point()+
  scale_y_log10(breaks=c(1,2,5,10,20,50,100,200))+
      scale_x_log10(breaks=c(0.1,0.2,0.5,1.0))+
  labs(x=sprintf("Replication (x %d obs.)",n_InstEval),
       y="Elapsed time (s)")+
  geom_smooth(method="lm", formula = y ~ x)+
  scale_colour_brewer(palette="Set1")

