emmeans: regrid() for binomial GLMM with user-defined link function

Viewed 43

I have fitted a binomial GLMM in R with a modified link function with a fixed guessing probability as suggested in this thread - except that the guessing probability is 1/2 and not 1/3. Therefore the sigmoidal activation in my case becomes:
P(correct) = 0.5 + 0.5*(exp(term)/(1 + exp(term))).

My model looks like this:

library(lme4)

m = 2
mod = glmer(correct ~ group*stim_strength + (stim_strength|subject) , 
            family=binomial(link=mafc.logit(m)), data=obs_data)

where: guessing probability is 1/m; correct is a categorical variable indicating correct/incorrect response; group is a factor with two levels; stim_strength is numerical with values in [0,1]; mafc.logit is the function suggested in the thread.
I'm essentially fitting separate psychometric curves of the stimulus strength (stim_strength) for the two groups, while taking into account the inter-subject fluctuations in slope and intercept (random effect structure (stim_strength|subject))

This is what I get:

plot_model(mod, type = 'emm', terms = c('stim_strength', 'group'))

---> plot

The model describes the data nicely, and I now want to perform some post-hoc analyses on it. Specifically, I want to run for example:

mod.emm = emmeans(mod, ~group|stim_strength, at=list(stim_strength=c(.25,.75)))
confint(regrid(mod.emm))
contrast(regrid(mod.emm), 'pairwise', simple = 'group', combine = TRUE, adjust = 'holm')

i.e. compute confidence intervals for the %correct of the two groups at some specified values of stim_strength, and compare the %correct of the two groups at these values.

Note that I'm using regrid(), because I want the analyses to be done on the back-transformed values, not on the linear part of the model! However, regrid() won't work with a user-defined link function. In fact, the regrid is just ignored here, as you can see e.g. from the output of the confint() call above (estimates are labelled as prob but they're clearly not transformed to [.5,1]):

stim_strength = 0.25:
 group   prob    SE  df asymp.LCL asymp.UCL
 1     -1.329 0.173 Inf    -1.716    -0.942
 2     -0.553 0.161 Inf    -0.913    -0.192

stim_strength = 0.75:
 group   prob    SE  df asymp.LCL asymp.UCL
 1      1.853 0.372 Inf     1.018     2.687
 2      3.375 0.395 Inf     2.489     4.261

Similarly, when adding type='response' in emmeans, I get the message:

Unknown transformation "mafc.logit(2)": no transformation done

Any workaround?

Thanks!

1 Answers

Looking at the linked suggestion, it appears that mafc.logit() is a function that returns a list with all the information needed to implement the transform. All you need to do is update the emmGrid object with that information:

mod.emm <- update(mod.emm, tran = mafc.logit(2))
confint(regrid(mod.emm), adjust = 'holm')
# etc...

See, for example, this vignette section and possibly other parts of that vignette.

Related