MultinMix
is an R package designed for fitting Multispecies N-Mixture (MNM) Models (Mimnagh, Niamh, et al. (2022)), a powerful tool for estimating abundance and occurrence of multiple species in a hierarchical Bayesian framework.
To install the development version of MultiNMix
, use the following commands in R:
if (!requireNamespace("devtools", quietly = TRUE)) {
install.packages("devtools")
devtools::install_github("niamhmimnagh/MultiNMix")
Here is a quick example to get you started with MultiNMix
:
library(MultinMix)
# Example data
x <- simulateData(model = "MNM")
R<-x$R
T<-x$T
S<-x$S
K<-x$K
Xp <- array(rnorm(R * S * 2), dim = c(R, S, 2)) # creating 2 detection probability covariates
Xn <- array(rnorm(R * S *3), dim = c(R, S, 3)) # creating 3 abundance covariates
# Fit
fit <- MNM_fit(
Y = species_counts,
Xp = Xp,
Xn = Xn,
Hurdle=FALSE,
AR = FALSE,
iterations = 5000, # Number of iterations
burnin = 1000, # Burn-in period
thin = 10, # Thinning interval
prior_detection_probability="dnorm(0,0.01)" # user-defined normal prior distribution
)
# Summarize results
fit@summary
# Plot diagnostic results by specifying the model and the parameter
tracePlot(fit, param="N[8,1]")
density(fit, param="N[8,1]")
# A list of all available diagnostic plots can be found:
View(y@plot)
MNM_fit()
: Fits a Multispecies N-Mixture Model using specified data and parameters.tracePlot()
: Generates traceplots of monitored parameters.density()
: Generates density plots of monitored parameters.logLik()
: Extracts the log-likelihood of the model.AIC()
, BIC()
: Computes AIC and BIC values for model comparison.check_convergence()
: Assesses model convergence using Gelman-Rubin diagnostics.Detailed documentation and vignettes are available in the package. After installation, access them using:
??MultiNMix
There are two datasets available in the package birds
and the zero-inflated birds_ZI
. Both are a subset of the North American Breeding Bird Survey dataset (https://www.pwrc.usgs.gov/BBS/). birds
is a dataframe with 2,880 observations and 13 columns (R=24, T=10, S=20, K=6) while birds_ZI
is a dataframe with 600 observations and 13 columns (R=15, T=10, S=10, K=4).
In this vignette, we will show the birds
dataset, the processing steps required and a worked example of it.
```R data(birds) head(birds)
| Route | Year | English_Common_Name |Stop 1|Stop 2|...|Stop 10|
| - | - | - | - | - | - |-|
| 001 | 2016 | Mourning Dove |0|1|...|0|
| 007 | 2016 | Mourning Dove |6|4|...|5|
| 009| 2016 | Mourning Dove |0|0|...|0|
The `birds` dataset is currently a data frame of dimension (600, 10). It needs to be reformatted into an array of dimension (R=15, T=10, S=10, K=4) before it can be used with the `MultiNMix` functions.
```R
# Data must first be reformatted to an array of dimension (R,T,S,K)
R <- 15
T <- 10
S <- 10
K <- 4
# Ensure data is ordered consistently
birds <- birds[order(birds$Route, birds$Year, birds$English_Common_Name), ]
# Create a 4D array with proper dimension
Y <- array(NA, dim = c(R, T, S, K))
# Map route, species, and year to indices
route_idx <- as.numeric(factor(birds$Route))
species_idx <- as.numeric(factor(birds$English_Common_Name))
year_idx <- as.numeric(factor(birds$Year))
# Populate the array
stop_data <- as.matrix(birds[, grep("^Stop", colnames(birds))])
for (i in seq_len(nrow(birds))) {
Y[route_idx[i], , species_idx[i], year_idx[i]] <- stop_data[i, ]
}
# Assign dimnames
dimnames(Y) <- list(
Route = sort(unique(birds$Route)),
Stop = paste0("Stop", 1:T),
Species = sort(unique(birds$English_Common_Name)),
Year = sort(unique(birds$Year)))
The function MNM_fit
in the MultiNMix
package allows for easy implementation of a multi-species N-mixture model using data of this format.
model<-MNM_fit((Y=Y, AR=FALSE, Hurdle=FALSE))
We can then access elements of the model as follows:
model@summary # outputs the mean estimate, standard deviation, standard error, 95% credible interval, effective sample size and gelman rubin statistic for each monitored variable
model@estimates$N # outputs the estimated mean N
logLik(model) # estimates the log likelihood of the model
AIC(model)/BIC(model) # outputs the AIC or BIC values
tracePlot(model, param="N[1,1]") # outputs the traceplot of the N[1,1] parameter
density(model, param="N[1,1]") #outputs the density plot for the N[1,1] parameter
Contributions are welcome! If you encounter any issues or have suggestions for improvement, please submit a report or a pull request.
Mimnagh, Niamh, et al. "Bayesian multi-species N-mixture models for unmarked animal communities." Environmental and Ecological Statistics 29.4 (2022): 755-778.
MultiNMix
was developed as part of research into multispecies abundance modeling. Special thanks to the creators of Nimble (r-nimble.org) for their invaluable tools in Bayesian modeling.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.