Background: I am trying to fit the right model to check if birds of different age groups (adult\juvenile) reacted differently to an acoustic stimulus during migration (meaning that birds are staying at the site for very short periods – every individual is counted only once). The “reaction” of birds is represented by their presence. In the experiment birds were captured (and released shortly afterwards) at two sites: (1) experimental site– where playback was used alternately: one day on and one day off for 50 days (altogether providing 25 repeats of each) and (2) control site – no playback at all – accounting for the natural variation in the numbers. Altogether ~300 birds were captured at each site (not many per age category per day). An example from the dataframe:

I thought about three options to model the effect of the experiment (and other factors) on the number of birds from each age group:

  1. Poisson – problematic due to severe overdispersion. Therefore, this model was discarded and I suggest using binomial distribution (see next two models). Theoretically would have been: glm(formula = Age_count_Experimental ~ Playback * AgeGroup + Day + offset(log(Age_count_Control)), family = poisson(), data = DF) Where Age_count_Experimental is the number of birds caught at the experiment site, playback is whether playback was played or not (0/1), AgeGroup is Adult or Juvenile (so each Age_Count_Experimental has either the number of juveniles or the number of adults), Day is the day of the experiment (continuous starting at 1, accounting for the natural directional change along the migratory season) and Age_count_control is the number of birds in the control site at the same day (separated by age-group as in the experiment site), set as an offset to account for the natural changes in the number of birds from each group.

  2. Binomial – ratio according to age glm(formula = Age_prop ~ Playback * AgeGroup + Day, family = "binomial", data = DF, weights = Age_total) Here Age_prop is the daily number of birds (juvenile or adult) at the experiment site divided by the total number of birds from the same age group at both sites. Weights (Age_total) are the total number of birds form the same age group.

  3. Binomial – ratio of juveniles from all birds at each site (experimental \ control). glm(Experimental_AgeProportion ~ Playback * Control_AgeProportion + Day , family="binomial", data=DF, weights = Experimental_Total) Here Experiental_AgeProportion is the daily number of juveniles caught at the experiment site, divided by the total number of birds at the experiment site (juveniles+adults). To account for the natural variability as observed in the control site, I used Control_AgeProportion which is the same proportion (juv/juv+ad) but at the control site. Weights (Experimental_Total) are the total number of birds (juv+ad) from the experiment site.

My questions:

  1. Model #3 has an interaction that is not trivial. It is there to test whether the ratio of juveniles at the study site differed from the “natural” ratio (as presented by the data from the control site) during the treatment days (with playback) but not during the control days (no playback). Do I get it right? Am I using this control site data correctly?
  2. Models #2 and #3 clearly provide very different results (estimates, p-values) regarding the impact of the treatment on the reaction according to age group. I think model #3 is more useful in this case because the ratio checked in this model is more appropriate (especially given the current, small, sample size). Am I right? How and based on what can I justify the use of one model over the other?
  3. Are there missing parts in these models and the way I fit them using R? Are there things I should check regarding these models (such as checking overdispersion in model #1)?

1 Answer 1


I would use a GLMM for this with age category as a random factor (as you're trying to analyse differences between groups while also trying to predict an effect from other continuous variables), look for documentation associated witht he lme4 package.

As a previous poster said, stack overflow is a more appropriate for programming questions than this kind of broad question.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.