banter is a package for creating hierarchical acoustic event classifiers out of multiple call type detectors.
To install the latest version from GitHub:
# make sure you have devtools installed
if(!require('devtools')) install.packages('devtools')
# install package from GitHub
::install_github('ericarcher/banter') devtools
banterGuide()
.The BANTER (Bio-Acoustic eveNT classifiER) model is initialized with
a data frame of events. There is one row per event and it must have a
column called event.id
which is a unique id for each event,
and a column called species
which assigns each event to a
given species. Every other column in the data.frame will be used as a
predictor variable for the events.
In the package, an example data.frame is in the train.data
example data list as the $events
element.
data(train.data)
<- initBanterModel(train.data$events) bant.mdl
Next, detector data is added to the initialized BANTER model object.
Each detector is a data.frame with a column called event.id
that associates the detected call with an event that the model was
initialized with, and a call.id
column that provides a
unique identifier for each call. Every other column will be used as a
predictor variable for the calls.
In the package, example data.frames for three detectors are provided in
the $detectors
element of the train.data
example data list. Here is an example of adding the burst pulse
(bp
) detector.
<- addBanterDetector(
bant.mdl
bant.mdl, data = train.data$detectors$bp,
name = "bp",
ntree = 10,
sampsize = 1
)
The addBanterDetector
function can be called repeatedly
to add additional detectors. Alternatively, if the detectors are all in
a named list, they can be added at once:
<- addBanterDetector(
bant.mdl
bant.mdl, data = train.data$detectors,
ntree = 10,
sampsize = 1
)
Once all of the detectors have been added, then the full BANTER model is run:
<- runBanterModel(bant.mdl, ntree = 5000, sampsize = 3) bant.mdl
The model can be easily summarized:
summary(bant.mdl)
The actual randomForest
model can be extracted for the
event or detector models:
# extract event Random Forest model
<- getBanterModel(bant.mdl, "event")
event.rf
# extract burst pulse (bp) Random Forest model
<- getBanterModel(bant.mdl, "bp") bp.rf
These can then be visualized using other tools, such as those in the
rfPermute
package:
library(rfPermute)
plotVotes(event.rf)
To predict novel data, it must be in a list with the event data in
the $events
element, and the detector data in a named list
called $detectors
:
data(test.data)
predict(bant.mdl, test.data)
Rankin, S., Archer, F., Keating, J. L., Oswald, J. N., Oswald, M., Curtis, A. and Barlow, J. (2017) Acoustic classification of dolphins in the California Current using whistles, echolocation clicks, and burst pulses. Mar Mam Sci, 33: 520-540. doi:10.1111/mms.12381
addBanterDetector()
to provide a
warning instead of an error if a detector didn’t have enough detections
of a species and add all detectors that were valid.subsampleDetections()
to draw a random number of
detections per eventpredict()
so that species names in
new.data
are modified using make.names()
like
they are in constructing the initial banter model.summary()
to display a matrix of all.summary()
and
plotDetectorTrace()
.addBanterDetector()
are now first checked to make sure they
are syntactically valid and unique by comparing them with the results
from make.names()
.new.data
submitted to predict()
are first
checked to make sure at least one detector from model is present.new.data
for
predict()
will automatically have all species detector
probabilities and detector proportions set to 0.predict()
if
species
column exists in new.data
banterGuide()