In this vignette, I demonstrate EoAR models fitted to no targets, but I include an offset.
My example data is the bat mortality dataset from the EoAR manuscript.
library(tidyverse) library(EoAR) data("batMortData", package="EoAR") batMortData <- batMortData %>% mutate(NLBA = 0) # no carcasses found set.seed(82001) #knitr::kable(batMortData)
# Compute one average g gParams <- EoAR::mixtureBeta( batMortData$gAlpha, batMortData$gBeta, batMortData$Turbines) # increase width of g distribution to illustrate the point # If we don't do this, narrowness of g makes changes # in uncertainty difficult to see gParams$alpha <- gParams$alpha / 1000 gParams$beta <- gParams$beta / 1000 gParams
# Input dataset zeroData <- data.frame( NLBA = rep(0,1), Turbines = 2000 ) fit <- EoAR::eoar(NLBA ~ 1, beta.params = gParams, data = zeroData, offset = NULL, nadapt = 10000, nburns = 50000, niters = 50000, nthins = 100, nchains = 3, quiet = TRUE) r1 <- data.frame( nSites = nrow(zeroData), offset = 1, model = paste("Y ~",as.character(fit$call$lambda)[3]), mMedian = fit$estimates[labels(fit,"Mtot"),"Estimate"], mMean = mean(unlist(fit$out[,"Mtot"])), lambdaMean = mean(unlist(fit$out[,"lambda"])) ) summary(fit)
fit <- EoAR::eoar(NLBA ~ 1, beta.params = gParams, data = zeroData, offset = log(Turbines), nadapt = 10000, nburns = 50000, niters = 50000, nthins = 100, nchains = 3, quiet = TRUE) r2 <- data.frame( nSites = nrow(zeroData), offset = zeroData$Turbines, model = paste("Y ~",as.character(fit$call$lambda)[3]), mMedian = fit$estimates[labels(fit,"Mtot"),"Estimate"], mMean = mean(unlist(fit$out[,"Mtot"])), lambdaMean = mean(unlist(fit$out[,"lambda"])) ) summary(fit)
# Input dataset zeroData <- data.frame( NLBA = rep(0,4), Turbines = rpois(4, 400) ) zeroData <- zeroData %>% bind_rows(data.frame(NLBA = 0, Turbines = 2000 - sum(.$Turbines))) knitr::kable(zeroData) fit <- EoAR::eoar(NLBA ~ 1, beta.params = gParams, data = zeroData, offset = log(Turbines), nadapt = 10000, nburns = 50000, niters = 50000, nthins = 100, nchains = 3, quiet = TRUE) r3 <- data.frame( nSites = nrow(zeroData), offset = mean(zeroData$Turbines), model = paste("Y ~",as.character(fit$call$lambda)[3]), mMedian = fit$estimates[labels(fit,"Mtot"),"Estimate"], mMean = mean(unlist(fit$out[,"Mtot"])), lambdaMean = mean(unlist(fit$out[,"lambda[1]"])) ) summary(fit)
# Input dataset zeroData <- data.frame( NLBA = rep(0,19), Turbines = rpois(19, 2000/20) ) zeroData <- zeroData %>% bind_rows(data.frame(NLBA = 0, Turbines = 2000 - sum(.$Turbines))) knitr::kable(zeroData) fit <- EoAR::eoar(NLBA ~ 1, beta.params = gParams, data = zeroData, offset = log(Turbines), nadapt = 10000, nburns = 50000, niters = 50000, nthins = 100, nchains = 3, quiet = TRUE) r4 <- data.frame( nSites = nrow(zeroData), offset = mean(zeroData$Turbines), model = paste("Y ~",as.character(fit$call$lambda)[3]), mMedian = fit$estimates[labels(fit,"Mtot"),"Estimate"], mMean = mean(unlist(fit$out[,"Mtot"])), lambdaMean = mean(unlist(fit$out[,"lambda[1]"])) ) summary(fit)
ans <- rbind(r1, r2, r3, r4) ans <- ans %>% mutate(lambdaScaled = lambdaMean * nSites * offset) knitr::kable(ans)
Note that lambdaMean is mortalities per turbine per year, and is constant across rows with the same number of turbines. Multiplying mortatlities per turbine by number of turbines is approximately the total number killed (i.e., lambdaScaled = $Mtot = T\lambda$ where $T$ = number of turbines).
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.