I'm struggling to work out how analyse directions of animal body temperature responses reported among papers in a systematic review.
The responses are coded relative to baseline as decrease
, none
or increase
), and I want to examine study design effects on these outcomes (e.g. wild/captive population, taxon, treatment type, potential for methods to induce stress and whether the response was validated against another measure).
Also, as there are sometimes multiple responses per paper, I need to account for non-independence between samples.
I've pasted in a typical example dataset (n = 36 responses from 14 papers) below:
df <- structure(list(response = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 1L, 3L, 1L, 3L, 1L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), levels = c("decrease", "none", "increase"), class = "factor"), studypop = structure(c(2L,2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), levels = c("captive", "wild+wildcaught"), class = "factor"), taxon = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L), levels = c("Bird", "Mammal"), class = "factor"), treatcat = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L), levels = c("artificial", "real/simulation"), class = "factor"), stresspot = structure(c(2L, 2L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L), levels = c("high+unclear", "low"), class = "factor"), validated = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L), levels = c("no", "yes"), class = "factor"), paperid = structure(c(8L, 8L, 1L, 1L, 1L, 14L, 14L, 3L, 3L, 3L, 5L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 9L, 9L, 7L, 13L, 10L, 10L, 10L, 10L, 11L, 11L, 11L, 12L, 12L, 12L, 4L, 6L, 6L), levels = c("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14"), class = "factor")), row.names = c(NA, -36L), class = "data.frame")
My original thought was to use mixed effect ordinal logistic regression, e.g. using clmm2
:
model.1 <- clmm2(response ~ studypop + taxon + treatcat + stresspot +
validated, random = paperid, Hess = TRUE, data = df)
However, I suspect my sample sizes are too small for this approach. The above model fails with a variance-covariance matrix error, presumably as there were too many zero categories when relating response to paperid.
Even without the random effect, I run into (presumably) separation problems as the frequency of none
and increase
responses is zero among validated:yes
studies.
Is there an alternative way to analyse these kinds of data in relatively small sample sizes?
Ideally, I'd like to investigate the effects of as many of my potential explanatory variables as possible. But, I understand I may have to abandon some, or take a wholly different approach.