Description of data
I have to analyze some data where the response variable is the counts of number of insects observed feeding on a bait at many time points. The treatments are three different types of bait and there are several replicates per treatment. However it was not possible to count the number of insects exactly at each time point. Instead, each time point was assigned a count class. The designations and ranges of values for each class are as follows:
- 0
- 1
- 2
- 5 (3-6)
- 10 (7-14)
- 20 (15-34)
- 50 (35-74)
- 100 (75-154)
- 200 (155-249)
- 300 (>249)
As you can see the number used to designate the class is roughly but not always exactly the midpoint of the range.
Model fitting problem
I want to fit a model to help determine whether the abundance of insects differs between treatments.
My first thought was to just treat the class designations as if they were true counts and use a zero-inflated poisson response distribution. That seems wrong because it ignores the fact that a value of 200 may not actually represent 200 insects; the true underlying value could be anywhere from 155-249.
I also was considering fitting an ordered multinomial and treating the count classes as classes. That seems more appropriate but it also bothers me, because it is throwing away information. The count classes do convey at least some information about the relative number of ants but if you convert it to ordinal classes, you lose all that information except for class 1 < class 2 < class 3, and so on.
Snippets of data and code
The first few rows of the data look like this, after converting the abundance class to an ordered factor using the ordered()
function in R.
Rep Trtmt Time_posttrt Abund_class Abund_class_ordinal
<dbl> <chr> <dbl> <dbl> <ord>
1 2 Ctrl 5 20 20
2 2 Ctrl 10 10 10
3 2 Ctrl 15 50 50
4 2 Ctrl 20 100 100
5 2 Ctrl 25 100 100
6 2 Ctrl 30 50 50
7 2 Ctrl 35 100 100
8 2 Ctrl 40 100 100
9 2 Ctrl 45 100 100
10 2 Ctrl 50 100 100
My brms
formulas in R that I have tried look like this (not including priors etc.):
Zero-inflated Poisson:
brm(Abund_class ~ Trtmt + (1 + Time_posttrt | Rep), family = zero_inflated_poisson)
Ordered multinomial:
brm(Abund_class_ordinal ~ Trtmt + (1 + Time_posttrt | Rep), family = cumulative(link = 'logit'))
I would appreciate any general advice on fitting a model to this type of data. I can provide reproducible data and code if it would be helpful, but I was hoping for more general advice on model fitting with this type of data.