R/annsm.model.counts.R

Defines functions annsm.model.counts

Documented in annsm.model.counts

annsm.model.counts <-
function(x, offset=TRUE, year=-1, cl=0.95){

  if( year == -1 )
    year <- max(x$year)
  x$year <- relevel(factor(x$year), which(levels(factor(x$year))==year))
  
  x$offset <- 0
  if ( offset ) 
    x$offset <- ifelse(x$corrcaps > x$totcaps, log(x$totcaps/x$corrcaps), 0)

  if( length(table(x$site)) > 1 )
    x.gam <- gam(totcaps ~ as.factor(site) + s(year), family="quasipoisson", offset=offset, data=x)
  else
    x.gam <- gam(totcaps ~ s(year), family="quasipoisson", offset=offset, data=x)
  
  nyrs <- max(x$year) - min(x$year) + 1
  newdata <- as.data.frame(cbind(site=rep(min(as.numeric(x.gam$xlevels[[1]])), nyrs)))
  newdata$year <- c(min(x$year):max(x$year))
  
  ann.vals <- ann.model.counts(x, year)$parms$parm
  
  x.pred <- predict(x.gam, newdata, se.fit=TRUE)
  x.pred$fit <- x.pred$fit + (mean(ann.vals) - mean(x.pred$fit))  
  
  years <- c(min(x$year):max(x$year))
  res <- cbind(years, data.frame(cbind(parm=x.pred$fit,se=x.pred$se))) # necessary to stop factor conversion!
  res$index <- exp(res$parm)
  res$annual <- exp(ann.vals)
  
  cl.int <- qnorm(1-((1-cl)/2))
  res$lcl <- exp(res$parm - cl.int * res$se)
  res$ucl <- exp(res$parm + cl.int * res$se)
  
  params <- summary(x.gam)
  
  list(model = x.gam, 
       parms = res,
       test = list(type = 'smooth',
                   edf = params$edf,
                   scale = params$scale,
                   r2 = params$dev.expl))
  
}
btorobrob/cesr documentation built on June 9, 2025, 5:39 a.m.