nattys
nattys

Reputation: 235

Interpreting output from emmeans::contrast

I have data from a longitudinal study and calculated the regression using the lme4::lmer function. After that I calculated the contrasts for these data but I am having difficulty interpreting my results, as they were unexpected. I think I might have made a mistake in the code. Unfortunately I couldn't replicate my results with an example, but I will post both the failed example and my actual results below.

My results:

library(lme4)
library(lmerTest)
library(emmeans)

#regression
regmemory <- lmer(memory ~ as.factor(QuartileConsumption)*Age+
                  (1 + Age | ID) + sex + education + 
                  HealthScore, CognitionData)
#results
summary(regmemory) 

#Fixed effects:
#                                       Estimate Std. Error         df t value Pr(>|t|)    
#(Intercept)                        -7.981e-01  9.803e-02  1.785e+04  -8.142 4.15e-16 ***
#as.factor(QuartileConsumption)2    -8.723e-02  1.045e-01  2.217e+04  -0.835  0.40376    
#as.factor(QuartileConsumption)3    5.069e-03  1.036e-01  2.226e+04   0.049  0.96097    
#as.factor(QuartileConsumption)4    -2.431e-02  1.030e-01  2.213e+04  -0.236  0.81337    
#Age                                -1.709e-02  1.343e-03  1.989e+04 -12.721  < 2e-16 ***
#sex                                3.247e-01  1.520e-02  1.023e+04  21.355  < 2e-16 ***
#education                          2.979e-01  1.093e-02  1.061e+04  27.266  < 2e-16 ***
#HealthScore                       -1.098e-06  5.687e-07  1.021e+04  -1.931  0.05352 .  
#as.factor(QuartileConsumption)2:Age  1.101e-03  1.842e-03  1.951e+04   0.598  0.55006    
#as.factor(QuartileConsumption)3:Age  4.113e-05  1.845e-03  1.935e+04   0.022  0.98221    
#as.factor(QuartileConsumption)4:Age  1.519e-03  1.851e-03  1.989e+04   0.821  0.41174    

#contrasts
emmeans(regmemory, poly ~ QuartileConsumption * Age)$contrast

#$contrasts
# contrast  estimate     SE  df z.ratio p.value
# linear      0.2165 0.0660 Inf   3.280  0.0010
# quadratic   0.0791 0.0289 Inf   2.733  0.0063
# cubic      -0.0364 0.0642 Inf  -0.567  0.5709

The interaction terms in the regression results are not significant, but the linear contrast is. Shouldn't the p-value for the contrast be non-significant?

Below is the code I wrote to try to recreate these results, but failed:

library(dplyr)
library(lme4)
library(lmerTest)
library(emmeans)

data("sleepstudy")

#create quartile column
sleepstudy$Quartile <- sample(1:4, size = nrow(sleepstudy), replace = T)

#regression
model1 <- lmer(Reaction ~ Days * as.factor(Quartile) + (1 + Days | Subject), data = sleepstudy)

#results
summary(model1) 

#Fixed effects:
#                          Estimate Std. Error       df t value Pr(>|t|)    
#(Intercept)               258.1519     9.6513  54.5194  26.748  < 2e-16 ***
#Days                        9.8606     2.0019  43.8516   4.926 1.24e-05 ***
#as.factor(Quartile)2      -11.5897    11.3420 154.1400  -1.022    0.308    
#as.factor(Quartile)3       -5.0381    11.2064 155.3822  -0.450    0.654    
#as.factor(Quartile)4      -10.7821    10.8798 154.0820  -0.991    0.323    
#Days:as.factor(Quartile)2   0.5676     2.1010 152.1491   0.270    0.787    
#Days:as.factor(Quartile)3   0.2833     2.0660 155.5669   0.137    0.891    
#Days:as.factor(Quartile)4   1.8639     2.1293 153.1315   0.875    0.383    

#contrast
emmeans(model1, poly ~ Quartile*Days)$contrast

#contrast  estimate    SE  df t.ratio p.value
# linear       -1.91 18.78 149  -0.102  0.9191
# quadratic    10.40  8.48 152   1.227  0.2215
# cubic       -18.21 18.94 150  -0.961  0.3379

In this example, the p-value for the linear contrast is non-significant just as the interactions from the regression. Did I do something wrong, or these results are to be expected?

Upvotes: 0

Views: 1580

Answers (1)

Russ Lenth
Russ Lenth

Reputation: 6810

Look at the emmeans() call for the original model:

emmeans(regmemory, poly ~ QuartileConsumption * Age)

This requests that we obtain marginal means for combinations of QuartileConsumption and Age, and obtain polynomial contrasts from those results. It appears that Age is a quantitative variable, so in computing the marginal means, we just use the mean value of Age (see documentation for ref_grid() and vignette("basics", "emmeans")). So the marginal means display, which wasn't shown in the OP, will be in this general form:

QuartileConsumption    Age    emmean
------------------------------------
1                     <mean>  <est1>
2                     <mean>  <est2>
3                     <mean>  <est3>
4                     <mean>  <est4>

... and the contrasts shown will be the linear, quadratic, and cubic trends of those four estimates, in the order shown.

Note that these marginal means have nothing to do with the interaction effect; they are just predictions from the model for the four levels of QuartileConsumption at the mean Age (and mean education, mean health score), averaged over the two sexes, if I understand the data structure correctly. So essentially the polynomial contrasts estimate polynomial trends of the 4-level factor at the mean age. And note in particular that age is held constant, so we certainly are not looking at any effects of Age.

I am guessing what you want to be doing to examine the interaction is to assess how the age trend varies over the four levels of that factor. If that is the case, one useful thing to do would be something like

slopes <- emtrends(regmemory, ~ QuartileConsumption, var = "age")
slopes    # display the estimated slope at each level
pairs(slopes)    # pairwise comparisons of these slopes

See vignette("interactions", "emmeans") and the section on interactions with covariates.

Upvotes: 0

Related Questions