3-way interaction gltcode

AFNI version info (afni -ver):
@Gang @ptaylor
If I am running a 3dLMEr mode which shows a 3-way interaction between DrugTimeSHAPS, where Drug and Time have two levels, and SHAPS is a quantitative variable.

How do I test how the Drug*Time effect is modulated by SHAPS?

I currently have:

Drug : '1DrugA' '-1DrugB' Time : '1Post' '-1Pre' SHAPS :

Do I have to specify multiple gltcodes with different SHAPS values (e.g., +-1.5SD) and compare the results qualitatively, or is there a way to look at the linear effect of SHAPS on the Drug*Time interaction?

The three-way interaction involving Drug, Time, and SHAPS reveals the linear marginal effect of SHAPS with the interaction between Drug and Time factors. To further parse the interaction, you might consider estimating additional effects such as

'Drug : 1*DrugA Time : 1*Post SHAPS :'
'Drug : 1*DrugA Time : 1*Pre SHAPS :'`
'Drug : 1*DrugB Time : 1*Post SHAPS :'
'Drug : 1*DrugB Time : 1*Pre SHAPS :'
'Drug : 1*DrugA -1*DrugB Time : 1*Post SHAPS :'
'Drug : 1*DrugA -1*DrugB Time : 1*Pre SHAPS :'
'Drug : 1*DrugA Time : 1*Post -1*Pre SHAPS :'
'Drug : 1*DrugB Time : 1*Post -1*Pre SHAPS :'

Gang Chen

Thanks @Gang .

If I want to focus on the Drug*Time interaction and how it is modulated by SHAPS, should I do the above contrasts at specific High/Low (+-1SD) values of SHAPS? e.g.:

Drug : '1DrugA' '-1DrugB' Time : '1Post' '-1Pre' SHAPS : +1SDvalue
Drug : '1DrugA' '-1DrugB' Time : '1Post' '-1Pre' SHAPS : -1SDvalue

Your suggested specification:

Drug : '1DrugA' '-1DrugB' Time : '1Post' '-1Pre' SHAPS : +1SDvalue
Drug : '1DrugA' '-1DrugB' Time : '1Post' '-1Pre' SHAPS : -1SDvalue

would not make syntactical sense to 3dLMEr.

The three-way interaction:

'Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre SHAPS :'

shows the linear marginal interaction effect of SHAPS in the following manner: the alteration by a unit in SHAPS is associated with the interaction effect between Drug and Time. Whether the unit is expressed in the SHAPS physical space or as a standard deviation is essentially a matter of preference and convenience.

Gang Chen

I see. I read in the 3dMVM documentation that specifying 'SHAPS : ' in this way means you are looking at the effect of other variables at the MEAN (given SHAPS is mean-centered) value of SHAPS, so it is not looking at a linear effect. Maybe that led to the confusion. I tried doing the specification I wrote above (using +-1.5 SD values of SHAPS) and I did get different results for the two contrasts.

if Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre SHAPS : is indeed the linear effect of SHAPS on the Drug*Time interaction, then what would the sign of any significant cluster from the contrast indicate - i.e., if the resulting cluster has negative z, how is it different from it having a positive z?

Thank you so much @Gang

I read in the 3dMVM documentation that specifying 'SHAPS : ' in this way means you are looking at the effect of other variables at the MEAN (given SHAPS is mean-centered) value of SHAPS, so it is not looking at a linear effect. Maybe that led to the confusion.

The notion of interpreting a quantitative variable at its center value becomes relevant in scenarios where the said variable is not explicitly specified. Take, for instance:

'Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre'

I would appreciate if you could point out which content in the 3dMVM documentation leads to the confusion.

I tried doing the specification I wrote above (using +-1.5 SD values of SHAPS) and I did get different results for the two contrasts.

It is no surprise you got totally different results, but such results would not align with the intended assessment.

if Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre SHAPS : is indeed the linear effect of SHAPS on the Drug*Time interaction, then what would the sign of any significant cluster from the contrast indicate - i.e., if the resulting cluster has negative z, how is it different from it having a positive z?

This points to my previous suggestion of specifying more comparisons:

'Drug : 1*DrugA Time : 1*Post SHAPS :'
'Drug : 1*DrugA Time : 1*Pre SHAPS :'`
'Drug : 1*DrugB Time : 1*Post SHAPS :'
'Drug : 1*DrugB Time : 1*Pre SHAPS :'
'Drug : 1*DrugA -1*DrugB Time : 1*Post SHAPS :'
'Drug : 1*DrugA -1*DrugB Time : 1*Pre SHAPS :'
'Drug : 1*DrugA Time : 1*Post -1*Pre SHAPS :'
'Drug : 1*DrugB Time : 1*Post -1*Pre SHAPS :'

Gang Chen

Thanks @Gang

I was referring to this text in the 3dMVM documentation:

         2) When a quantitative covariate is involved in the model, the
         absence of the covariate in the GLT coding means that the test
         will be performed at the center value of the covariate. However,
         if the covariate value is specified with a value after the colon,
         for example, 'Group : 1*Old Age : 2', the effect of the Old Group
         would be tested at the value of 2 above the center. On the other
         hand, 'Group : 1*Old' tests for the effect of the Old Group at the
         center age.

         3) The effect for a quantitative variable (or slope) can be specified
         by omitting the value after the colon. For example,
         'Group : 1*Old Age : ', or 'Group : 1*Old - 1*Young Age : '.

specifically where it says"the effect of the Old Group would be tested at the value of 2 above the center." That is why I was trying to specify +-1.5SD values for SHAPS to get the effect at those values.

But I also see point 3 which says if you specify a quantitative variable with just a colon (e.g., 'SHAPS : ') then it will show the linear effect of that variable - apologies that I overlooked that point.

I am specifically interested in this effect:

Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre SHAPS :

i.e., how the Drug*Time interaction is dependent on HIGH/LOW values of SHAPS.

Let me use a simple example to explain the differences. Suppose one wants to compare body weight between females and males while adjusting for body height through centering. Two types of effects can be estimated from the model:

  1. Intercept: This represents the body weight difference between the two sexes. The effect is measured in units of weight (e.g., kg).

  2. Slope or Marginal Effect: This represents the change in body weight per unit of body height (e.g., kg/cm).

These two effects have entirely different interpretations and meanings. Applying this example to your case, the following specification:

'Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre SHAPS :'

corresponds to a slope-type effect. In contrast, the specification you insist on obtaining:

Drug : '1*DrugA' '-1*DrugB' Time : '1*Post' '-1*Pre' SHAPS : +1SDvalue
Drug : '1*DrugA' '-1*DrugB' Time : '1*Post' '-1*Pre' SHAPS : -1SDvalue

represents an intercept-type effect.

I hope this explanation clarifies the distinction.

Gang Chen

That makes sense, @Gang .
I get that 'Drug : 1*DrugA -1*DrugB Time : 1*Post -1*Pre SHAPS :' is the linear effect (slope) of SHAPS on the Drug*Time interaction.

The reason I want to also calculate the Drug*Time interaction effect at specific values (+-1.5SD) of SHAPS (intercept effect as you mention) is to be consistent with R's emmeans package:

mylist <- list(SHAPS=c(22,52))
p1=emmip(fit , Drug ~ Time | SHAPS ,at=mylist) 

Where this gives me interaction plots for Drug*Time at the specified values (+-1.5SD, [22,52]) of SHAPS. So I wanted to clarify if the following code achieves the same analysis:

Drug : '1*DrugA' '-1*DrugB' Time : '1*Post' '-1*Pre' SHAPS : 52
Drug : '1*DrugA' '-1*DrugB' Time : '1*Post' '-1*Pre' SHAPS : 22

If not, is it possible to specify the gltcode in way which achieves the intended goal - looking at Drug*Time interaction effect at specific HIGH/LOW values of SHAPS?
Best,
Avi

Yes, in that case it would be a valid specification.

Gang Chen