How long do animal signs remain visible?

HOME Great apes make nests to rest and ungulates produce clearly-visible dung piles: both of these are used to estimate the density of animals. Signs are much easier to count than animals. There are more of them, and they don't run away or hide when you approach. To convert the number or density of signs to number of animals, we need two additional bits of information: how many signs each animal produces per day, and how many days the signs remain visible (the persistence time or decay time).

If each animal produces p signs per day and signs remain visible for t days, then sign density will be:

S = D x p x t

where D is the density of animals. If we can estimate p and t, we can calculate D from S. In this post I want to provide code for estimating the persistence time of signs for retrospective studies of decay.

Retrospective estimation of persistence

There are several ways of dealing with estimation of persistence times. The 'retrospective' method involves the fewest assumptions: persistence is estimated by monitoring signs during the months before the main survey, and noting the age of the signs which are still visible at the time of the survey.

The estimate is based on observations in the study area during the period immediately prior to the sign density estimation, so no assumptions about the equivalence of persistence times across locations or time periods are needed.

Dung density was used to estimate the elephant population of the Nakai area in Lao PDR. The survey of dung density took place in a short period around 26 March 2006. Beginning on 24 September 2004, fresh elephant dung piles were located and carefully marked; in the following 18 months, over 1000 dung piles were recorded. At the time of the survey, these dung piles were checked to see which had disappeared and which were still visible. The results are shown in the graph below. (Note that the dung piles are either visible or not, but have been spread out above and below the respective horizontal line for display purposes.)

The graph shows that all the dung piles deposited more than 200 days prior to the surveys had disappeared, while those deposited in the last 40 days were still visible. Between those limits, some were visible, some not. We now fit a logistic (S-shaped) curve to the data - the red curve in the diagram below - which is an estimate of the survival probability of dung deposited at a particular time.

The effective survival period in this case is estimated to be 150 days. Some older dung piles are expected to survive, and some newer ones will disappear, but the two should balance out.

Calculating persistence

The first calculations were by Laing et al (2003) using logistic regression. This was reworked by Robert Burn (one of Laing's co-authors), who used analytical method for the integration involved instead of the numerical integration used by Laing et al. It was made available as a GenStat macro for use with the CITES-MIKE elephant monitoring programme (Hedges & Lawson, 2006). An R translation of that code follows.

Data: The data must be in a data frame with two columns and a row for each sign (dung pile or nest) monitored. The column DAYS gives the number of days from the creation of the sign to the sign density survey; the column STATE shows whether or not the sign was still visible at the time of the sign density survey, either as 1/0 (1=visible) or TRUE/FALSE.


MIKE.persistence <- function(DATA) {

##   Fit logistic regression model to STATE on DAYS, extract coefficients
  dung.glm <- glm(STATE ~ DAYS, data=DATA, family=binomial(link = "logit"))
  betas <- coefficients(dung.glm)
##   Calculate mean persistence time
  mean.decay <- -(1+exp(-betas[1])) * log(1+exp(betas[1])) / betas[2]

## Calculate the variance of the estimate
  vcovar <- vcov(dung.glm)
  var0 <- vcovar[1,1]  # variance of beta0
  var1 <- vcovar[2,2]  # variance of beta1
  covar <- vcovar[2,1] # covariance

  deriv0 <- -(1-exp(-betas[1]) * log(1+exp(betas[1])))/betas[2]
  deriv1 <- -mean.decay/betas[2]

  var.mean <- var0*deriv0^2 + 2*covar*deriv0*deriv1 + var1*deriv1^2

## Calculate the SE and CV and return
  se.mean <- sqrt(var.mean)
  cv.mean <- se.mean/mean.decay

  out <- c(mean.decay, se.mean, 100*cv.mean)
  names(out) <- c("Mean persistence time", "SE", "%CV")

You can copy-paste the above code into a new script, check that it is correct, then run with your own data.


Hedges & Lawson (2006) Dung survey standards for the MIKE programme. Nairobi, Kenya, CITES MIKE Central Coordinating Unit.

Laing, S. E. et al. (2003) "Dung and nest surveys: estimating decay rates." Journal of Applied Ecology 40: 1102-1111.

Updated 7 October 2017 by Mike Meredith