Linear mixed models (LMMs) vary in the complexity of their random-effect structure. Model comparisons with likelihood ratio tests (LRTs) assume that the LMMs to be compared are in a hierarchical order, that is simpler LMMs are nested under more complex ones. This script compares LMMs varying in complexity with respect to a basic feature of the R model formula, that is whether 1 + factor or 0 + factor is used in the fixed-effect (FE) or random-effect (RE) part of the model.
The script is also a follow-up to an RPub on reduction of LMM complexity with double-bar syntax. The update was motivated by an exchange in a thread at R-Sig-ME. The thread is about the question whether an LMM with an interaction between a fixed factor with three or more levels and a random factor (intLMM) is nested under the corresponding zero-correlation parameter LMM (zcpLMM). It turns out intLMM and zcpLMM are not nested, counter to what was claimed in the RPub.
In the R formula syntax the default intercept 1 (usually omitted in the code) can be replaced with 0 in the fixed-effect and in the random-factor terms of the model. By default 1 causes the estimation of coefficients according to the contrast specification for the factor in the fixed-effect part and the estimation of corresponding correlation parameters in the random-effect terms. When 0 is used, the fixed-effect coefficients are estimates of the means of the factor levels and the correlation parameters estimate the correlations between the levels (i.e., the repeated measures), rather than the correlations relating to contrast-based effects (or means). There are 2 x 2 specifications for the same LMM:
y ~ 1 + factor + (1 + factor | subj)y ~ 0 + factor + (1 + factor | subj)y ~ 1 + factor + (0 + factor | subj)y ~ 0 + factor + (0 + factor | subj)These models work as specified and all of them generate correlation parameters as part of the variance components. The four versions yield identical goodness of fit statistics; they represent reparameterizations of a single LMM.
Alternatively, factor can be replaced with the corresponding columns of the model matrix, that is with numeric covariates. For example, for a factor with three levels A, B, and C with c1 and c2 representing the two contrasts for the three levels, the four completely equivalent model versions are:
y ~ 1 + c1 + c2 + (1 + c1 + c2 | subj)y ~ 0 + A + B + C + (1 + c1 + c2 | subj)y ~ 1 + c1 + c2 + (0 + A + B + C | subj)y ~ 0 + A + B + C + (0 + A + B + C | subj)From the second specification it is transparent, that fixed effects in version 1 and 3 estimate the usual intercept and effects associated with the two contrasts whereas in version 2 and 4 they estimate the means for the three factor levels (no intercept). Similarly, correlation parameters in version 1 and 2 are based on intercept and contrasts whereas in version 3 and version 4 they are based on the measures associated with the levels of the factor. A specification of 1 + A + B + C leads to a redundant model parameter which may cause rank deficiency or convergence problems. 0 + c1 + c2 leads to underspecification of the model.
Aside from an arguably higher transparency of model parameters, the specification based on numeric covariates is actually required if one wants to use the double-bar syntax to force correlation parameters to zero. Specifically, replacing the | with || does not generate the expected results with factor in the random effect terms (RE). (Alternative: afex::lmer_alt() expands factors in RE to numeric covariates.) A zcpLMM must be based on numeric covariates if one wants to carry out LRT-based comparisons with the corresponding maxLMM or the minimal LMM varying only in intercept (minLMMs).
y ~ 1 + c1 + c2 + (1 + c1 + c2 || subj)y ~ 0 + A + B + C + (1 + c1 + c2 || subj)y ~ 1 + c1 + c2 + (0 + A + B + C || subj)y ~ 0 + A + B + C + (0 + A + B + C || subj)According to the analyses reported below, LMMs with the same RE structure and different FE structure are reparameterizations, but LMMs with RE1 (5, 6) yield better goodness of fit than LMMs with RE0 (7, 8). Note that all four LMMs use the same number of model parameters (degrees of freedom).
An LMM which allows for an interaction between the fixed and the random factor is a special case of a zcpLMM. Whether or not the intLMM can be directly compared with the corresponding zcpLMM will be examined in section 8.
y ~ 1 + factor + (1 | subj) + (1 | factor:subj)y ~ 0 + factor + (1 | subj) + (1 | factor:subj)The models represent a reparameterization with identical goodness of fit.
For sake of completenss, we also define the two minimal LMMs varying only in intercepts. They also represent a reparameterization of the same LMM.
y ~ 1 + factor + (1 | subj)y ~ 0 + factor + (1 | subj)The analyses reported in the following sections suggest that there are three unique nested sequences for model comparison.
maxLMM_FE1_RE1 -> zcpLMM_FE1_RE1 -> minLMM_FE1_RE1
maxLMM_FE1_RE1 -> intLMM_FE1 -> minLMM_FE1_RE1
maxLMM_FE1_RE0 -> zcpLMM_FE1_RE0
The models not mentioned here are reparamterizations of one of the models listed in the three nested sequences. For example, LMMs with FE0 are always mathematically equivalent to LMMs with FE1 (i.e., the LRT statistics will be identical). The selection of a specific LMM version for a sequence was chosen to allow for comparison of parameter estimates across models within a sequence, but it is important to be aware of possible mathematical equivalences with other versions.
knitr::opts_chunk$set(echo = TRUE)
suppressMessages(library("lme4"))
library("RePsychLing")
suppressMessages(library("tidyverse"))
The script uses the Machines data which are part of the MEMSS package [efficiency scores of 6 workers (random factor) tested 3 times on each of 3 machines (fixed factor) ]. For later reference, I compute means and correlations between the 3 machine scores by averaging the 3 measures available for the 6 workers (fixed-effect correlations).
In LMMs, means for and/or differences between the 3 machines are estimated with fixed effects. Of course, exactly which means or which differences are estimated depends on the contrast specification for the factor and on the forumula specification. In this script, I use the treatment contrast (i.e., the first machine is used as a reference level for comparison with the second and third machine).
In balanced designs as the current one, the fixed-effect correlations are also listed as part of the summary of lmer()-based maxLMMs. Due to shrinkage LMM correlation parameters are usually somewhat larger than the fixed-effect correlations.
data("Machines", package = "MEMSS")
Machines$Measure <- factor(rep(1:3))
d <- as.tibble(Machines)
contrasts(d$Machine) <- contr.treatment(3)
means <- d %>%
group_by(Machine, Worker) %>% summarize(Score = mean(score))
means
## # A tibble: 18 x 3
## # Groups: Machine [?]
## Machine Worker Score
## <fct> <fct> <dbl>
## 1 A 1 52.6
## 2 A 2 52.6
## 3 A 3 59.5
## 4 A 4 51.2
## 5 A 5 51.4
## 6 A 6 46.8
## 7 B 1 62.9
## 8 B 2 59.6
## 9 B 3 68.0
## 10 B 4 62.7
## 11 B 5 65.1
## 12 B 6 43.6
## 13 C 1 67.2
## 14 C 2 61.8
## 15 C 3 70.8
## 16 C 4 64.8
## 17 C 5 71.7
## 18 C 6 61.3
# Means of levels and contrasts
l_c <- means %>%
spread(Machine, Score) %>%
mutate(dBA = B-A, dCA = C-A, GM = (A+B+C)/3) %>%
summarize(A = mean(A), B = mean(B), C=mean(C), dBA = mean(dBA), dCA = mean(dCA), GM=mean(GM))
round(l_c, 2)
## # A tibble: 1 x 6
## A B C dBA dCA GM
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 52.4 60.3 66.3 7.97 13.9 59.6
# Interaction
ggplot(means, aes(x=Worker, y=Score, group=Machine, color=Machine)) +
geom_point() + geom_line() + theme_bw() + ggtitle("Figure 1: Interaction of worker by machine")
# fixed-effext correlations
fe_corr <- means %>%
spread(Machine, Score) %>%
mutate(dBA = B-A, dCA = C-A, GM = (A+B+C)/3) %>%
select(A, B, C, dBA, dCA, GM) %>%
cor()
round(fe_corr, 2)
## A B C dBA dCA GM
## A 1.00 0.79 0.61 0.46 -0.37 0.87
## B 0.79 1.00 0.76 0.91 0.03 0.97
## C 0.61 0.76 1.00 0.69 0.51 0.86
## dBA 0.46 0.91 0.69 1.00 0.30 0.81
## dCA -0.37 0.03 0.51 0.30 1.00 0.06
## GM 0.87 0.97 0.86 0.81 0.06 1.00
By default, the LMM takes the contrast assigned with the factor to build the model matrix. For the maxLMM one can use the factor or the numeric covariates (extracted from the default design matrix of the model).
print(summary(m1a <- lmer(score ~ 1 + Machine + (1 + Machine | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 + Machine | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.8157 3.7170
## Machine2 28.6862 5.3559 0.49
## Machine3 11.2431 3.3531 -0.36 0.30
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## Machine2 7.967 2.210 3.605
## Machine3 13.917 1.406 9.899
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 0.463
## Machine3 -0.374 0.301
# or equivalently with numeric covariates
mm1 <- model.matrix(~ 1 + Machine, d)
dBA <- mm1[, 2]
dCA <- mm1[, 3]
print(summary(m1b <- lmer(score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.8157 3.7170
## dBA 28.6862 5.3559 0.49
## dCA 11.2431 3.3531 -0.36 0.30
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## dBA 7.967 2.210 3.605
## dCA 13.917 1.406 9.899
##
## Correlation of Fixed Effects:
## (Intr) dBA
## dBA 0.463
## dCA -0.374 0.301
anova(m1a, m1b)
## Data: d
## Models:
## m1a: score ~ 1 + Machine + (1 + Machine | Worker)
## m1b: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m1a 10 236.42 256.31 -108.21 216.42
## m1b 10 236.42 256.31 -108.21 216.42 0 0 1
# Pick the LMM based on numeric covariates
maxLMM_FE1_RE1 <- m1 <- m1b
Thus, the intercept estimates the mean for machine A; the two fixed effects estimate the differenes of machines B and C to A (dBA and dCA). The variance components and correlation parameters correspond to this parameterization. (Of course, with a different contrast, fixed effects and correlation parameters will change accordingly.)
They are only similar not identical to the within-subject correlations due to shrinkage. For balanced designs like the current one, the within-subject correlations are actually reported in the fixed effect correlations of the lmer summary (see corresponding correlations in the last chunk.)
We can reparameterize the fixed-effects part.
print(summary(m2a <- lmer(score ~ 0 + Machine + (1 + Machine | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + Machine + (1 + Machine | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.8157 3.7170
## Machine2 28.6862 5.3559 0.49
## Machine3 11.2431 3.3531 -0.36 0.30
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## MachineA 52.356 1.534 34.12
## MachineB 60.322 3.221 18.73
## MachineC 66.272 1.649 40.19
##
## Correlation of Fixed Effects:
## MachnA MachnB
## MachineB 0.794
## MachineC 0.612 0.763
# or equivalently with numeric covariates
mm0 <- model.matrix(~ 0 + Machine, d)
A <- mm0[, 1]
B <- mm0[, 2]
C <- mm0[, 3]
print(summary(m2b <- lmer(score ~ 0 + A + B + C + (1 + dBA + dCA | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + A + B + C + (1 + dBA + dCA | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.8157 3.7170
## dBA 28.6862 5.3559 0.49
## dCA 11.2431 3.3531 -0.36 0.30
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## A 52.356 1.534 34.12
## B 60.322 3.221 18.73
## C 66.272 1.649 40.19
##
## Correlation of Fixed Effects:
## A B
## B 0.794
## C 0.612 0.763
anova(m2a, m2b)
## Data: d
## Models:
## m2a: score ~ 0 + Machine + (1 + Machine | Worker)
## m2b: score ~ 0 + A + B + C + (1 + dBA + dCA | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m2a 10 236.42 256.31 -108.21 216.42
## m2b 10 236.42 256.31 -108.21 216.42 0 0 1
# Pick the LMM based on numeric covariates
maxLMM_FE0_RE1 <- m2 <- m2b
Correlation parameters are easier to interpret if they estimate the correlations between the levels, because this is very close to a traditional correlation matrix. Of course, this is of no use if one is interested in the correlation of contrast-based experimental effects.
print(summary(m3a <- lmer(score ~ 1 + Machine + (0 + Machine | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (0 + Machine | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker MachineA 13.8157 3.7170
## MachineB 61.9450 7.8705 0.80
## MachineC 16.0049 4.0006 0.62 0.77
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## Machine2 7.967 2.210 3.605
## Machine3 13.917 1.406 9.899
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 0.463
## Machine3 -0.374 0.301
# or equivalently with numeric covariates
print(summary(m3b <- lmer(score ~ 1 + dBA + dCA + (0 + A + B + C | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker A 13.8157 3.7170
## B 61.9450 7.8705 0.80
## C 16.0049 4.0006 0.62 0.77
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## dBA 7.967 2.210 3.605
## dCA 13.917 1.406 9.899
##
## Correlation of Fixed Effects:
## (Intr) dBA
## dBA 0.463
## dCA -0.374 0.301
anova(m3a, m3b)
## Data: d
## Models:
## m3a: score ~ 1 + Machine + (0 + Machine | Worker)
## m3b: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m3a 10 236.42 256.31 -108.21 216.42
## m3b 10 236.42 256.31 -108.21 216.42 0 0 1
# Pick the LMM based on numeric covariates
maxLMM_FE1_RE0 <- m3 <- m3b
With this specification, the fixed effects estimate the means of the factor levels and the correlation parameters estimate the corresponding correlations between the scores of the three machines (not correlations based the contrast-based effects). Correlation parameters and fixed-effect correlations are not identical due to shrinkage in the former.
print(summary(m4a <- lmer(score ~ 0 + Machine + (0 + Machine | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + Machine + (0 + Machine | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker MachineA 13.8157 3.7170
## MachineB 61.9450 7.8705 0.80
## MachineC 16.0049 4.0006 0.62 0.77
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## MachineA 52.356 1.534 34.12
## MachineB 60.322 3.221 18.73
## MachineC 66.272 1.649 40.19
##
## Correlation of Fixed Effects:
## MachnA MachnB
## MachineB 0.794
## MachineC 0.612 0.763
# or equivalently with numeric covariates
print(summary(m4b <- lmer(score ~ 0 + A + B + C + (0 + A + B + C | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + A + B + C + (0 + A + B + C | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.4 256.3 -108.2 216.4 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker A 13.8157 3.7170
## B 61.9450 7.8705 0.80
## C 16.0049 4.0006 0.62 0.77
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## A 52.356 1.534 34.12
## B 60.322 3.221 18.73
## C 66.272 1.649 40.19
##
## Correlation of Fixed Effects:
## A B
## B 0.794
## C 0.612 0.763
anova(m4a, m4b)
## Data: d
## Models:
## m4a: score ~ 0 + Machine + (0 + Machine | Worker)
## m4b: score ~ 0 + A + B + C + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m4a 10 236.42 256.31 -108.21 216.42
## m4b 10 236.42 256.31 -108.21 216.42 0 0 1
# Pick the LMM based on numeric covariates
maxLMM_FE0_RE0 <- m4 <- m4b
All maxLMMs yield identical goodness of fit; they are reparameterizations of one LMM.
anova(m1a, m2a, m3a, m4a)
## Data: d
## Models:
## m1a: score ~ 1 + Machine + (1 + Machine | Worker)
## m2a: score ~ 0 + Machine + (1 + Machine | Worker)
## m3a: score ~ 1 + Machine + (0 + Machine | Worker)
## m4a: score ~ 0 + Machine + (0 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m1a 10 236.42 256.31 -108.21 216.42
## m2a 10 236.42 256.31 -108.21 216.42 0 0 <2e-16 ***
## m3a 10 236.42 256.31 -108.21 216.42 0 0 <2e-16 ***
## m4a 10 236.42 256.31 -108.21 216.42 0 0 1
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(m1b, m2b, m3b, m4b)
## Data: d
## Models:
## m1b: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## m2b: score ~ 0 + A + B + C + (1 + dBA + dCA | Worker)
## m3b: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## m4b: score ~ 0 + A + B + C + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m1b 10 236.42 256.31 -108.21 216.42
## m2b 10 236.42 256.31 -108.21 216.42 0 0 <2e-16 ***
## m3b 10 236.42 256.31 -108.21 216.42 0 0 <2e-16 ***
## m4b 10 236.42 256.31 -108.21 216.42 0 0 1
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
One can force correlation parameters to zero with the double-bar syntax. Again, I illustrate the two versions. The double-bar syntax of LMM m5 is a short cut for the explicit specification of LMM m5b. As shown in m5c, the double-bar syntax does not work for the factor-based specification (see RPub for an elaborate illustration).
One recent option is to use afex::lmer_alt() (see m5d) Here the factors are expanded to numeric covariates and the result is identical to m5. (It also reports p-values for fixed effects KR or S correction.)
print(summary(m5 <- lmer(score ~ 1 + dBA + dCA + (1 + dBA + dCA || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## (0 + dCA | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 235.1 249.0 -110.6 221.1 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.31194 -0.50699 0.00438 0.45299 2.47124
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 13.7771 3.7118
## Worker.1 dBA 28.8275 5.3691
## Worker.2 dCA 10.9321 3.3064
## Residual 0.9265 0.9626
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.532 34.170
## dBA 7.967 2.215 3.596
## dCA 13.917 1.387 10.031
##
## Correlation of Fixed Effects:
## (Intr) dBA
## dBA -0.015
## dCA -0.024 0.017
print(summary(m5b <- lmer(score ~ 1 + dBA + dCA + (1 | Worker) + (0 + dBA | Worker) + (0 + dCA | Worker),
data=d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA + dCA + (1 | Worker) + (0 + dBA | Worker) + (0 +
## dCA | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 235.1 249.0 -110.6 221.1 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.31194 -0.50699 0.00438 0.45299 2.47124
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 13.7771 3.7118
## Worker.1 dBA 28.8275 5.3691
## Worker.2 dCA 10.9321 3.3064
## Residual 0.9265 0.9626
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.532 34.170
## dBA 7.967 2.215 3.596
## dCA 13.917 1.387 10.031
##
## Correlation of Fixed Effects:
## (Intr) dBA
## dBA -0.015
## dCA -0.024 0.017
print(summary(m5c <- lmer(score ~ 1 + Machine + (1 + Machine || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + ((1 | Worker) + (0 + Machine | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 238.4 260.3 -108.2 216.4 43
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.40773 -0.51890 0.03229 0.45599 2.54088
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 0.7011 0.8373
## Worker.1 MachineA 13.1147 3.6214
## MachineB 61.2439 7.8259 0.81
## MachineC 15.3038 3.9120 0.61 0.77
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## Machine2 7.967 2.210 3.605
## Machine3 13.917 1.406 9.899
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 0.463
## Machine3 -0.374 0.301
print(summary(m5d <- afex::lmer_alt(score ~ 1 + Machine + (1 + Machine || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood . t-tests use
## Satterthwaite's method [lmerModLmerTest]
## Formula: score ~ 1 + Machine + (1 + re1.Machine2 + re1.Machine3 || Worker)
## Data: data
##
## AIC BIC logLik deviance df.resid
## 235.1 249.0 -110.6 221.1 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.31194 -0.50699 0.00438 0.45299 2.47124
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 13.7771 3.7118
## Worker.1 re1.Machine2 28.8275 5.3691
## Worker.2 re1.Machine3 10.9321 3.3064
## Residual 0.9265 0.9626
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 52.356 1.532 6.007 34.170 4.12e-08 ***
## Machine2 7.967 2.215 6.004 3.596 0.0114 *
## Machine3 13.917 1.387 6.007 10.031 5.65e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.015
## Machine3 -0.024 0.017
anova(m5, m5b, m5c)
## Data: d
## Models:
## m5: score ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## m5: (0 + dCA | Worker))
## m5b: score ~ 1 + dBA + dCA + (1 | Worker) + (0 + dBA | Worker) + (0 +
## m5b: dCA | Worker)
## m5c: score ~ 1 + Machine + ((1 | Worker) + (0 + Machine | Worker))
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m5 7 235.11 249.04 -110.56 221.11
## m5b 7 235.11 249.04 -110.56 221.11 0.0000 0 1.00
## m5c 11 238.42 260.30 -108.21 216.42 4.6954 4 0.32
# Pick the LMM based on numeric covariates
zcpLMM_FE1_RE1 <- m5
print(summary(m6 <- lmer(score ~ 0 + A + B + C + (1 + dBA + dCA || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + A + B + C + ((1 | Worker) + (0 + dBA | Worker) +
## (0 + dCA | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 235.1 249.0 -110.6 221.1 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.31194 -0.50699 0.00438 0.45299 2.47124
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 13.7771 3.7118
## Worker.1 dBA 28.8275 5.3691
## Worker.2 dCA 10.9321 3.3064
## Residual 0.9265 0.9626
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## A 52.356 1.532 34.17
## B 60.322 2.674 22.56
## C 66.272 2.042 32.45
##
## Correlation of Fixed Effects:
## A B
## B 0.560
## C 0.734 0.420
zcpLMM_FE0_RE1 <- m6
print(summary(m7 <- lmer(score ~ 1 + dBA + dCA + (0 + A + B + C || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA + dCA + ((0 + A | Worker) + (0 + B | Worker) +
## (0 + C | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 241.6 255.5 -113.8 227.6 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.28287 -0.54219 0.01523 0.47815 2.36982
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker A 13.8157 3.7170
## Worker.1 B 61.9450 7.8705
## Worker.2 C 16.0049 4.0006
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## dBA 7.967 3.568 2.233
## dCA 13.917 2.252 6.179
##
## Correlation of Fixed Effects:
## (Intr) dBA
## dBA -0.430
## dCA -0.681 0.293
zcpLMM_FE1_RE0 <- m7
print(summary(m8 <- lmer(score ~ 0 + A + B + C + (0 + A + B + C || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + A + B + C + ((0 + A | Worker) + (0 + B | Worker) +
## (0 + C | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 241.6 255.5 -113.8 227.6 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.28287 -0.54219 0.01523 0.47815 2.36982
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker A 13.8157 3.7170
## Worker.1 B 61.9450 7.8705
## Worker.2 C 16.0049 4.0006
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## A 52.356 1.534 34.12
## B 60.322 3.221 18.73
## C 66.272 1.649 40.19
##
## Correlation of Fixed Effects:
## A B
## B 0.000
## C 0.000 0.000
zcpLMM_FE0_RE0 <- m8
anova(m5, m6, m7, m8)
## Data: d
## Models:
## m5: score ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## m5: (0 + dCA | Worker))
## m6: score ~ 0 + A + B + C + ((1 | Worker) + (0 + dBA | Worker) +
## m6: (0 + dCA | Worker))
## m7: score ~ 1 + dBA + dCA + ((0 + A | Worker) + (0 + B | Worker) +
## m7: (0 + C | Worker))
## m8: score ~ 0 + A + B + C + ((0 + A | Worker) + (0 + B | Worker) +
## m8: (0 + C | Worker))
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m5 7 235.11 249.04 -110.56 221.11
## m6 7 235.11 249.04 -110.56 221.11 0 0 <2e-16 ***
## m7 7 241.63 255.55 -113.81 227.63 0 0 1
## m8 7 241.63 255.55 -113.81 227.63 0 0 1
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The different random-effect terms yield different deviances with a better fit for random-effect terms based on contrasts (RE1) than on levels (RE0). Given the equivalence of all maxLMMs, this translates into larger differences in goodness of fit between zcpLMM and maxLMM for random-effect terms based on levels.
anova(m5, m1)
## Data: d
## Models:
## m5: score ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## m5: (0 + dCA | Worker))
## m1: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m5 7 235.11 249.04 -110.56 221.11
## m1 10 236.42 256.31 -108.21 216.42 4.6954 3 0.1955
anova(m6, m2)
## Data: d
## Models:
## m6: score ~ 0 + A + B + C + ((1 | Worker) + (0 + dBA | Worker) +
## m6: (0 + dCA | Worker))
## m2: score ~ 0 + A + B + C + (1 + dBA + dCA | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m6 7 235.11 249.04 -110.56 221.11
## m2 10 236.42 256.31 -108.21 216.42 4.6954 3 0.1955
anova(m7, m3)
## Data: d
## Models:
## m7: score ~ 1 + dBA + dCA + ((0 + A | Worker) + (0 + B | Worker) +
## m7: (0 + C | Worker))
## m3: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m7 7 241.63 255.55 -113.81 227.63
## m3 10 236.42 256.31 -108.21 216.42 11.208 3 0.01065 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(m8, m4)
## Data: d
## Models:
## m8: score ~ 0 + A + B + C + ((0 + A | Worker) + (0 + B | Worker) +
## m8: (0 + C | Worker))
## m4: score ~ 0 + A + B + C + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m8 7 241.63 255.55 -113.81 227.63
## m4 10 236.42 256.31 -108.21 216.42 11.208 3 0.01065 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The intLMM is of interest in the current context, because it estimates two VPs, one for the intercept of the random factor and one for the interaction of the fixed and random factor. There is no correlation parameter. Therefore, it looks like a special case of a zcpLMM, but Section 8 shows that intLMM is not nested under zcpLMM.
The interaction between a fixed and a random factor is estimated with the following LMMs for FE1 and FE0; there are no RE0 versions for intLMM.
# intLMM_FE1
print(summary(m9 <- lmer(score ~ 1 + Machine + (1 | Worker) + (1 | Machine:Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (1 | Machine:Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 237.3 249.2 -112.6 225.3 48
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.25899 -0.55135 -0.00649 0.44670 2.54889
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 11.5398 3.3970
## Worker (Intercept) 19.0487 4.3645
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Machine:Worker, 18; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 2.269 23.072
## Machine2 7.967 1.987 4.009
## Machine3 13.917 1.987 7.003
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.438
## Machine3 -0.438 0.500
# ... or equivalently
print(summary(m9b <- lmer(score ~ 1 + Machine + (1 | Worker/Machine), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker/Machine)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 237.3 249.2 -112.6 225.3 48
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.25899 -0.55135 -0.00649 0.44670 2.54889
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 11.5398 3.3970
## Worker (Intercept) 19.0487 4.3645
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Machine:Worker, 18; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 2.269 23.072
## Machine2 7.967 1.987 4.009
## Machine3 13.917 1.987 7.003
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.438
## Machine3 -0.438 0.500
anova(m9, m9b)
## Data: d
## Models:
## m9: score ~ 1 + Machine + (1 | Worker) + (1 | Machine:Worker)
## m9b: score ~ 1 + Machine + (1 | Worker/Machine)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m9 6 237.27 249.2 -112.64 225.27
## m9b 6 237.27 249.2 -112.64 225.27 0 0 1
intLMM_FE1 <- m9
# intLMM_FE0
print(summary(m10 <- lmer(score ~ 0 + Machine + (1 | Worker) + (1 | Machine:Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + Machine + (1 | Worker) + (1 | Machine:Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 237.3 249.2 -112.6 225.3 48
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.25899 -0.55135 -0.00649 0.44670 2.54889
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 11.5398 3.3970
## Worker (Intercept) 19.0487 4.3645
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Machine:Worker, 18; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## MachineA 52.356 2.269 23.07
## MachineB 60.322 2.269 26.58
## MachineC 66.272 2.269 29.20
##
## Correlation of Fixed Effects:
## MachnA MachnB
## MachineB 0.617
## MachineC 0.617 0.617
intLMM_FE0 <- m10
anova(m9, m10)
## Data: d
## Models:
## m9: score ~ 1 + Machine + (1 | Worker) + (1 | Machine:Worker)
## m10: score ~ 0 + Machine + (1 | Worker) + (1 | Machine:Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m9 6 237.27 249.2 -112.64 225.27
## m10 6 237.27 249.2 -112.64 225.27 0 0 1
Finally, for sake of completeness, here are the two minimal LMMs varying only in intercept.
# minLMM_FE1
print(summary(m11 <- lmer(score ~ 1 + Machine + (1 | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 303.7 313.6 -146.9 293.7 49
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.8012 -0.5245 0.1352 0.6740 1.7760
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 21.93 4.683
## Residual 9.58 3.095
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 2.046 25.584
## Machine2 7.967 1.032 7.722
## Machine3 13.917 1.032 13.489
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.252
## Machine3 -0.252 0.500
minLMM_FE1 <- m11
# minLMM_FE0
print(summary(m12 <- lmer(score ~ 0 + Machine + (1 | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 0 + Machine + (1 | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 303.7 313.6 -146.9 293.7 49
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.8012 -0.5245 0.1352 0.6740 1.7760
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 21.93 4.683
## Residual 9.58 3.095
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## MachineA 52.356 2.046 25.58
## MachineB 60.322 2.046 29.48
## MachineC 66.272 2.046 32.38
##
## Correlation of Fixed Effects:
## MachnA MachnB
## MachineB 0.873
## MachineC 0.873 0.873
minLMM_FE0 <- m12
anova(m11, m12)
## Data: d
## Models:
## m11: score ~ 1 + Machine + (1 | Worker)
## m12: score ~ 0 + Machine + (1 | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m11 5 303.7 313.65 -146.85 293.7
## m12 5 303.7 313.65 -146.85 293.7 0 0 1
Here I will recapitulate my intial analysis the RPub which I interpreted as support for a nested structure. Given the counterarguments by Rune Haubo in this R-Sig-ME thread, I look for counterexamples with the present data.
In the RPub (see LMM m1d vs. m1e), I suggested that intLMM is nested under zcpLMMs for a factors with three or more levels, bascially assuming that the VP for the interaction is divided into separate VPs (one for each contrast) in the zcpLMM. The LRT for the Machines data shows that including the variance component for the interaction significantly improves the fit. Figure 1 shows that the profiles (across workers) for the three machines are indeed far from parallel.
Given that there are two contrasts for the Machine factor, I thought that one can think of the Machine:Worker term as a combination/aggregation of two VPs. I also thought that zcpLMM m5 (which uses contrasts for fixed effects and random-effect terms) represents an LMM in which the two components are estimated separately. From this perspective, LMM m9 appears to be nested under zcpLMM m5.
where “->” means reduction of LMM complexity.
VarCorr(intLMM_FE1) # m9
## Groups Name Std.Dev.
## Machine:Worker (Intercept) 3.39703
## Worker (Intercept) 4.36448
## Residual 0.96158
VarCorr(zcpLMM_FE1_RE1) # m5
## Groups Name Std.Dev.
## Worker (Intercept) 3.71176
## Worker.1 dBA 5.36913
## Worker.2 dCA 3.30638
## Residual 0.96257
anova(m11, m9, m5, m1)
## Data: d
## Models:
## m11: score ~ 1 + Machine + (1 | Worker)
## m9: score ~ 1 + Machine + (1 | Worker) + (1 | Machine:Worker)
## m5: score ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## m5: (0 + dCA | Worker))
## m1: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m11 5 303.70 313.65 -146.85 293.70
## m9 6 237.27 249.20 -112.64 225.27 68.4338 1 < 2e-16 ***
## m5 7 235.11 249.04 -110.56 221.11 4.1562 1 0.04148 *
## m1 10 236.42 256.31 -108.21 216.42 4.6954 3 0.19551
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
My interpretation of this result was that the interaction between worker and the first contrast of Machine (i.e., dBA) is significantly larger than the interaction between worker and the second contrast of Machine (i.e., dCA), that is variance component dBA = 5.37 > dCA = 3.31 in zcpLMM m5. Rune Haubo’s post at R-Sig-ME suggested that this may not be true. Therefore, I carried out a few additional checks.
One option is to test the sequence for the alternative zcpLMM_FE1_RE0 specification. The minLMM_FE1 is not included, because there is no intercept in this
VarCorr(zcpLMM_FE1_RE0) # m7
## Groups Name Std.Dev.
## Worker A 3.71695
## Worker.1 B 7.87051
## Worker.2 C 4.00061
## Residual 0.96158
anova(m9, m7, m3)
## Data: d
## Models:
## m9: score ~ 1 + Machine + (1 | Worker) + (1 | Machine:Worker)
## m7: score ~ 1 + dBA + dCA + ((0 + A | Worker) + (0 + B | Worker) +
## m7: (0 + C | Worker))
## m3: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m9 6 237.27 249.20 -112.64 225.27
## m7 7 241.63 255.55 -113.81 227.63 0.000 1 1.00000
## m3 10 236.42 256.31 -108.21 216.42 11.208 3 0.01065 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
In this sequence, intLMM m9 fits better than zcpLMM m7, despite the extra degree of freedom for the latter. This is a problem, because in this case intLMM m9 cannot be nested under zcpLMM m5. This is strong evidence against a nested structure.
For a two-level factor, intLMM and zcpLMM estimate the same number of model parameters. Therefore, the two models should represent a reparameterization, that is they should be mathematically equivalent. As a quick check, I used the data from only two machines.
d2 <- droplevels(subset(d, Machine != "C"))
contrasts(d2$Machine) <- contr.treatment(2)
mm_treatment <- model.matrix(~ 1 + Machine, d2)
dBA_d2 <- mm_treatment[,2]
print(summary(int1_d2 <- lmer(score ~ 1 + dBA_d2 + (1 | Worker) + (1 | Machine:Worker), d2, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA_d2 + (1 | Worker) + (1 | Machine:Worker)
## Data: d2
##
## AIC BIC logLik deviance df.resid
## 169.8 177.7 -79.9 159.8 31
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.02351 -0.50430 0.06411 0.42752 2.29980
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 14.26 3.777
## Worker (Intercept) 23.54 4.852
## Residual 1.16 1.077
## Number of obs: 36, groups: Machine:Worker, 12; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 2.523 20.753
## dBA_d2 7.967 2.210 3.605
##
## Correlation of Fixed Effects:
## (Intr)
## dBA_d2 -0.438
print(summary(zcp1_d2 <- lmer(score ~ 1 + dBA_d2 + (1 + dBA_d2 || Worker), d2, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dBA_d2 + ((1 | Worker) + (0 + dBA_d2 | Worker))
## Data: d2
##
## AIC BIC logLik deviance df.resid
## 165.2 173.1 -77.6 155.2 31
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.06919 -0.52887 0.05533 0.42967 2.22646
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 13.992 3.741
## Worker.1 dBA_d2 29.057 5.390
## Residual 1.155 1.075
## Number of obs: 36, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.548 33.823
## dBA_d2 7.967 2.230 3.573
##
## Correlation of Fixed Effects:
## (Intr)
## dBA_d2 -0.019
anova(int1_d2, zcp1_d2)
## Data: d2
## Models:
## int1_d2: score ~ 1 + dBA_d2 + (1 | Worker) + (1 | Machine:Worker)
## zcp1_d2: score ~ 1 + dBA_d2 + ((1 | Worker) + (0 + dBA_d2 | Worker))
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## int1_d2 5 169.76 177.68 -79.879 159.76
## zcp1_d2 5 165.17 173.09 -77.587 155.17 4.5845 0 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
This was not expected: intLMM and zcpLMM are not equivalent! Does the contrast specification matter? I replaced the treatment contrast with a sum contrast.
contrasts(d2$Machine) <- contr.sum(2)
mm_sum <- model.matrix(~ 1 + Machine, d2)
dA_GM <- mm_sum[,2]
print(summary(int_d2 <- lmer(score ~ 1 + dA_GM + (1 | Worker) + (1 | Machine:Worker), d2, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dA_GM + (1 | Worker) + (1 | Machine:Worker)
## Data: d2
##
## AIC BIC logLik deviance df.resid
## 169.8 177.7 -79.9 159.8 31
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.02351 -0.50430 0.06411 0.42752 2.29980
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 14.26 3.777
## Worker (Intercept) 23.54 4.852
## Residual 1.16 1.077
## Number of obs: 36, groups: Machine:Worker, 12; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 56.339 2.268 24.841
## dA_GM -3.983 1.105 -3.605
##
## Correlation of Fixed Effects:
## (Intr)
## dA_GM 0.000
print(summary(zcp_d2 <- lmer(score ~ 1 + dA_GM + (1 + dA_GM || Worker), d2, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dA_GM + ((1 | Worker) + (0 + dA_GM | Worker))
## Data: d2
##
## AIC BIC logLik deviance df.resid
## 169.8 177.7 -79.9 159.8 31
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.02351 -0.50430 0.06411 0.42752 2.29980
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 30.670 5.538
## Worker.1 dA_GM 7.132 2.671
## Residual 1.160 1.077
## Number of obs: 36, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 56.339 2.268 24.841
## dA_GM -3.983 1.105 -3.605
##
## Correlation of Fixed Effects:
## (Intr)
## dA_GM 0.000
anova(int_d2, zcp_d2)
## Data: d2
## Models:
## int_d2: score ~ 1 + dA_GM + (1 | Worker) + (1 | Machine:Worker)
## zcp_d2: score ~ 1 + dA_GM + ((1 | Worker) + (0 + dA_GM | Worker))
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## int_d2 5 169.76 177.68 -79.879 159.76
## zcp_d2 5 169.76 177.68 -79.879 159.76 0 0 1
Indeed, contrast matters! With contr.sum(2), intLMM and zcpLMM are clearly identical. Thus, it appears that for two-level factors mathematical equivalence is possible for sum contrasts, but not for treatment contrasts. My hunch is that the intercept in the treatment contrast estimates one of the factor levels.
Figure 1 suggests that Workers 5 and 6 are mainly responsible for this difference. In response to Rune Haubo’s post and as a check, I changed their Machine B data to align parallel to Machine C.
For a similar exercise see also “Interactions of grouping factors and other covariates” in Bates (2009, slides 84 to 95). A synopsis of this section is given in Section 11 below.
d$score_2 <- ifelse(d$Worker == "6" & d$Machine == "B", d$score + 15, d$score)
d$score_2 <- ifelse(d$Worker == "5" & d$Machine == "B", d$score + 4, d$score_2)
means_2 <- d %>%
group_by(Machine, Worker) %>% summarize(Score = mean(score_2))
means_2
## # A tibble: 18 x 3
## # Groups: Machine [?]
## Machine Worker Score
## <fct> <fct> <dbl>
## 1 A 1 52.6
## 2 A 2 52.6
## 3 A 3 59.5
## 4 A 4 51.2
## 5 A 5 51.4
## 6 A 6 46.8
## 7 B 1 62.9
## 8 B 2 59.6
## 9 B 3 68.0
## 10 B 4 62.7
## 11 B 5 69.1
## 12 B 6 58.6
## 13 C 1 67.2
## 14 C 2 61.8
## 15 C 3 70.8
## 16 C 4 64.8
## 17 C 5 71.7
## 18 C 6 61.3
ggplot(means_2, aes(x=Worker, y=Score, group=Machine, color=Machine)) +
geom_point() + geom_line() + theme_bw() + ggtitle("Figure 2: Modified means of worker x machine")
contrasts(d$Machine) <- contr.treatment(3)
mm1 <- model.matrix(~ 1 + Machine, d)
dBA <- mm1[, 2]
dCA <- mm1[, 3]
print(summary(m9_2 <- lmer(score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 220.5 232.5 -104.3 208.5 48
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.34708 -0.52782 0.05395 0.50259 2.41783
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 3.6593 1.9129
## Worker (Intercept) 11.2694 3.3570
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Machine:Worker, 18; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.594 32.854
## Machine2 11.133 1.150 9.681
## Machine3 13.917 1.150 12.101
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.361
## Machine3 -0.361 0.500
print(summary(m5_2 <- lmer(score_2 ~ 1 + dBA + dCA + (1 + dBA + dCA || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## (0 + dCA | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 229.0 242.9 -107.5 215.0 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.37755 -0.53888 0.03744 0.49481 2.31515
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 13.3031 3.6473
## Worker.1 dBA 9.9696 3.1575
## Worker.2 dCA 10.3992 3.2248
## Residual 0.9394 0.9692
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.506 34.754
## dBA 11.133 1.329 8.378
## dCA 13.917 1.356 10.266
##
## Correlation of Fixed Effects:
## (Intr) dBA
## dBA -0.026
## dCA -0.026 0.029
print(summary(m10_2 <- lmer(score_2 ~ Machine + (1 | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ Machine + (1 | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 254 264 -122 244 49
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.4522 -0.5530 0.0685 0.5359 1.7610
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 12.184 3.491
## Residual 3.669 1.915
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.3556 1.4948 35.02
## Machine2 11.1333 0.6385 17.44
## Machine3 13.9167 0.6385 21.80
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.214
## Machine3 -0.214 0.500
print(summary(m1_2 <- lmer(score_2 ~ 1 + Machine + (1 + Machine | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 215.8 235.7 -97.9 195.8 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.2654 -0.6364 0.1528 0.5789 2.4308
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.8234 3.7180
## Machine2 10.8421 3.2927 -0.39
## Machine3 11.2807 3.3587 -0.36 1.00
## Residual 0.9016 0.9495
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 52.356 1.534 34.124
## Machine2 11.133 1.381 8.062
## Machine3 13.917 1.407 9.889
##
## Correlation of Fixed Effects:
## (Intr) Machn2
## Machine2 -0.404
## Machine3 -0.373 0.974
anova(m10_2, m9_2, m5_2, m1_2)
## Data: d
## Models:
## m10_2: score_2 ~ Machine + (1 | Worker)
## m9_2: score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker)
## m5_2: score_2 ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## m5_2: (0 + dCA | Worker))
## m1_2: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m10_2 5 254.02 263.97 -122.012 244.02
## m9_2 6 220.53 232.46 -104.263 208.53 35.497 1 2.554e-09 ***
## m5_2 7 228.99 242.91 -107.494 214.99 0.000 1 1.0000000
## m1_2 10 215.79 235.68 -97.894 195.79 19.200 3 0.0002485 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(m10_2, m9_2, m1_2)
## Data: d
## Models:
## m10_2: score_2 ~ Machine + (1 | Worker)
## m9_2: score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker)
## m1_2: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m10_2 5 254.02 263.97 -122.012 244.02
## m9_2 6 220.53 232.46 -104.263 208.53 35.497 1 2.554e-09 ***
## m1_2 10 215.79 235.68 -97.894 195.79 12.740 4 0.01262 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(m10_2, m5_2, m1_2)
## Data: d
## Models:
## m10_2: score_2 ~ Machine + (1 | Worker)
## m5_2: score_2 ~ 1 + dBA + dCA + ((1 | Worker) + (0 + dBA | Worker) +
## m5_2: (0 + dCA | Worker))
## m1_2: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m10_2 5 254.02 263.97 -122.012 244.02
## m5_2 7 228.99 242.91 -107.494 214.99 29.037 2 4.951e-07 ***
## m1_2 10 215.79 235.68 -97.894 195.79 19.200 3 0.0002485 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The modification worked in principle, that is variance components are now quite similar, dBA = 3.16 anddCA = 3.22 in zcpLMM m5_2. However, intLMM m9_2 fits better than zcpLMM m5_2, despite the extra degree of freedom for the latter. This is a problem, because in this case intLMM m9_2 cannot be nested under zcpLMM m5_2. Again, this is evidence agaist intLMM being nested under zcpLMM.
Is the contrast the problem? In other words, do the fit statistics align with the degrees of freedom for the sum contrast?
contrasts(d$Machine) <- contr.sum(3)
mm3 <- model.matrix(~ 1 + Machine, d)
dA_GM <- mm3[, 2]
dB_GM <- mm3[, 3]
print(summary(m9_2b <- lmer(score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 220.5 232.5 -104.3 208.5 48
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.34708 -0.52782 0.05395 0.50259 2.41783
##
## Random effects:
## Groups Name Variance Std.Dev.
## Machine:Worker (Intercept) 3.6593 1.9129
## Worker (Intercept) 11.2694 3.3570
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Machine:Worker, 18; Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 60.706 1.449 41.904
## Machine1 -8.350 0.664 -12.576
## Machine2 2.783 0.664 4.192
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 0.000
## Machine2 0.000 -0.500
print(summary(m5_2b <- lmer(score_2 ~ 1 + dA_GM + dB_GM + (+ dA_GM + dB_GM || Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula:
## score_2 ~ 1 + dA_GM + dB_GM + ((1 | Worker) + (0 + dA_GM | Worker) +
## (0 + dB_GM | Worker))
## Data: d
##
## AIC BIC logLik deviance df.resid
## 223.6 237.6 -104.8 209.6 47
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.44418 -0.56151 0.08045 0.48211 2.39276
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 12.488 3.5338
## Worker.1 dA_GM 4.504 2.1223
## Worker.2 dB_GM 1.023 1.0116
## Residual 0.938 0.9685
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 60.7056 1.4487 41.904
## dA_GM -8.3500 0.8863 -9.422
## dB_GM 2.7833 0.4531 6.143
##
## Correlation of Fixed Effects:
## (Intr) dA_GM
## dA_GM 0.000
## dB_GM 0.000 -0.043
print(summary(m10_2b <- lmer(score_2 ~ Machine + (1 | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ Machine + (1 | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 254 264 -122 244 49
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.4522 -0.5530 0.0685 0.5359 1.7610
##
## Random effects:
## Groups Name Variance Std.Dev.
## Worker (Intercept) 12.184 3.491
## Residual 3.669 1.915
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 60.7056 1.4487 41.90
## Machine1 -8.3500 0.3686 -22.65
## Machine2 2.7833 0.3686 7.55
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 0.000
## Machine2 0.000 -0.500
print(summary(m1_2b <- lmer(score_2 ~ 1 + Machine + (1 + Machine | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 215.8 235.7 -97.9 195.8 44
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.2654 -0.6364 0.1528 0.5789 2.4308
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 12.4917 3.5344
## Machine1 4.9143 2.2168 -0.23
## Machine2 1.1598 1.0769 0.18 -1.00
## Residual 0.9016 0.9495
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 60.7056 1.4487 41.904
## Machine1 -8.3500 0.9233 -9.044
## Machine2 2.7833 0.4761 5.846
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.223
## Machine2 0.163 -0.942
anova(m10_2b, m9_2b, m5_2b, m1_2b)
## Data: d
## Models:
## m10_2b: score_2 ~ Machine + (1 | Worker)
## m9_2b: score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker)
## m5_2b: score_2 ~ 1 + dA_GM + dB_GM + ((1 | Worker) + (0 + dA_GM | Worker) +
## m5_2b: (0 + dB_GM | Worker))
## m1_2b: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m10_2b 5 254.02 263.97 -122.012 244.02
## m9_2b 6 220.53 232.46 -104.263 208.53 35.497 1 2.554e-09 ***
## m5_2b 7 223.64 237.56 -104.819 209.64 0.000 1 1.000000
## m1_2b 10 215.79 235.68 -97.894 195.79 13.850 3 0.003116 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(m10_2b, m9_2b, m1_2b)
## Data: d
## Models:
## m10_2b: score_2 ~ Machine + (1 | Worker)
## m9_2b: score_2 ~ Machine + (1 | Worker) + (1 | Machine:Worker)
## m1_2b: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m10_2b 5 254.02 263.97 -122.012 244.02
## m9_2b 6 220.53 232.46 -104.263 208.53 35.497 1 2.554e-09 ***
## m1_2b 10 215.79 235.68 -97.894 195.79 12.740 4 0.01262 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
anova(m10_2b, m5_2b, m1_2b)
## Data: d
## Models:
## m10_2b: score_2 ~ Machine + (1 | Worker)
## m5_2b: score_2 ~ 1 + dA_GM + dB_GM + ((1 | Worker) + (0 + dA_GM | Worker) +
## m5_2b: (0 + dB_GM | Worker))
## m1_2b: score_2 ~ 1 + Machine + (1 + Machine | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## m10_2b 5 254.02 263.97 -122.012 244.02
## m5_2b 7 223.64 237.56 -104.819 209.64 34.387 2 3.412e-08 ***
## m1_2b 10 215.79 235.68 -97.894 195.79 13.850 3 0.003116 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The results are clear. IntLMM and zcpLMM were not in the expected order with respect to goodness of fit; intLMM fits the modified data better than the zcpLMM. For a two-level factor mathematical equivalence was possible for sum contrast, not treatment contrast. For the three-level factor the outcome did not depend on the choice of contrast for factor. Also when using sum contrast for the original data, a better goodness-of-fit statistic was obtained for intLMM than zcpLMM.
For the LMMs considered in this script, there are three hiearchical structures that can be compared with LRTs:
maxLMM_FE1_RE1 -> zcpLMM_FE1_RE1 -> minLMM_FE1_RE1
maxLMM_FE1_RE1 -> intLMM_FE1 -> minLMM_FE1_RE1
maxLMM_FE1_RE0 -> zcpLMM_FE1_RE0
where “->” means reduction of LMM complexity.
Empirically (from what I have seen so far), goodness of fit is better for zcpLMM_RE1 than zcpLMM_RE0. Note that these LMMs use the same number of model parameters (degrees of freedom).
In conclusion, intLMM and zcpLMM are not in a hierarchal order despite the extra degree of freedom for the latter. Rune Haubo’s argument that there are two hierarchical orders with respect to these models desribed in the R-Sig-ME thread is valid.
Parsimonious LMMs still need to be sorted into the hierarchical model sequences. Here I explore whether treatment contrasts in prsmLMM_FE1_RE1 lead to mathematically equivalent goodness of fit in prsmLMM_FE1_RE0.
print(summary(prsmLMM_FE1_RE1 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.6 252.5 -110.3 220.6 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.29836 -0.50665 -0.01621 0.45950 2.42303
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.7151 3.7034
## Worker.1 dBA 29.1133 5.3957
## dCA 11.0432 3.3231 0.30
## Residual 0.9257 0.9621
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.8021 33.101
## Machine1 -7.2944 0.9893 -7.373
## Machine2 0.6722 1.4119 0.476
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.530
## Machine2 0.383 -0.710
print(summary(prsmLMM_FE1_RE0 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + B + C | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + B + C | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.6 252.5 -110.3 220.6 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.29836 -0.50665 -0.01621 0.45950 2.42303
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.7151 3.7034
## Worker.1 B 29.1133 5.3957
## C 11.0432 3.3231 0.30
## Residual 0.9257 0.9621
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.8021 33.101
## Machine1 -7.2944 0.9893 -7.373
## Machine2 0.6722 1.4119 0.476
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.530
## Machine2 0.383 -0.710
anova(prsmLMM_FE1_RE1, prsmLMM_FE1_RE0, maxLMM_FE1_RE1, maxLMM_FE1_RE0)
## Data: d
## Models:
## prsmLMM_FE1_RE1: score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker)
## prsmLMM_FE1_RE0: score ~ 1 + Machine + (1 | Worker) + (0 + B + C | Worker)
## maxLMM_FE1_RE1: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## maxLMM_FE1_RE0: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## prsmLMM_FE1_RE1 8 236.58 252.49 -110.29 220.58
## prsmLMM_FE1_RE0 8 236.58 252.49 -110.29 220.58 0.0000 0 1.0000
## maxLMM_FE1_RE1 10 236.42 256.31 -108.21 216.42 4.1578 2 0.1251
## maxLMM_FE1_RE0 10 236.42 256.31 -108.21 216.42 0.0000 0 <2e-16
##
## prsmLMM_FE1_RE1
## prsmLMM_FE1_RE0
## maxLMM_FE1_RE1
## maxLMM_FE1_RE0 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
prsmLMM_FE1_RE1 and prsmLMM_FE1_RE0 are mathematically equivalent.
print(summary(prsmLMM_FE1_RE1 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.6 252.5 -110.3 220.6 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.29836 -0.50665 -0.01621 0.45950 2.42303
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.7151 3.7034
## Worker.1 dBA 29.1133 5.3957
## dCA 11.0432 3.3231 0.30
## Residual 0.9257 0.9621
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.8021 33.101
## Machine1 -7.2944 0.9893 -7.373
## Machine2 0.6722 1.4119 0.476
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.530
## Machine2 0.383 -0.710
print(summary(prsmLMM_FE1_RE0 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + A + B | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + A + B | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 237.4 253.3 -110.7 221.4 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.29838 -0.55106 0.01563 0.46128 2.54804
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 15.7729 3.9715
## Worker.1 A 10.9837 3.3142
## B 29.6279 5.4432 0.33
## Residual 0.9269 0.9627
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.9023 31.356
## Machine1 -7.2944 0.9772 -7.465
## Machine2 0.6722 1.4109 0.476
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.017
## Machine2 0.374 -0.703
anova(prsmLMM_FE1_RE1, prsmLMM_FE1_RE0, maxLMM_FE1_RE1, maxLMM_FE1_RE0)
## Data: d
## Models:
## prsmLMM_FE1_RE1: score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker)
## prsmLMM_FE1_RE0: score ~ 1 + Machine + (1 | Worker) + (0 + A + B | Worker)
## maxLMM_FE1_RE1: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## maxLMM_FE1_RE0: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## prsmLMM_FE1_RE1 8 236.58 252.49 -110.29 220.58
## prsmLMM_FE1_RE0 8 237.40 253.31 -110.70 221.40 0.0000 0 1.0000
## maxLMM_FE1_RE1 10 236.42 256.31 -108.21 216.42 4.9802 2 0.0829
## maxLMM_FE1_RE0 10 236.42 256.31 -108.21 216.42 0.0000 0 <2e-16
##
## prsmLMM_FE1_RE1
## prsmLMM_FE1_RE0
## maxLMM_FE1_RE1 .
## maxLMM_FE1_RE0 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
prsmLMM_FE1_RE1 and prsmLMM_FE1_RE0 are mathematically not equivalent.
print(summary(prsmLMM_FE1_RE1 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.6 252.5 -110.3 220.6 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.29836 -0.50665 -0.01621 0.45950 2.42303
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.7151 3.7034
## Worker.1 dBA 29.1133 5.3957
## dCA 11.0432 3.3231 0.30
## Residual 0.9257 0.9621
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.8021 33.101
## Machine1 -7.2944 0.9893 -7.373
## Machine2 0.6722 1.4119 0.476
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.530
## Machine2 0.383 -0.710
print(summary(prsmLMM_FE1_RE0 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + A + C | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + A + C | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 245.4 261.3 -114.7 229.4 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.2582 -0.4981 -0.0030 0.4498 2.5500
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 61.0492 7.8134
## Worker.1 A 28.2979 5.3196
## C 28.9294 5.3786 0.80
## Residual 0.9269 0.9627
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 3.4790 17.146
## Machine1 -7.2944 0.9813 -7.433
## Machine2 0.6722 1.3949 0.482
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 0.275
## Machine2 -0.394 -0.698
anova(prsmLMM_FE1_RE1, prsmLMM_FE1_RE0, maxLMM_FE1_RE1, maxLMM_FE1_RE0)
## Data: d
## Models:
## prsmLMM_FE1_RE1: score ~ 1 + Machine + (1 | Worker) + (0 + dBA + dCA | Worker)
## prsmLMM_FE1_RE0: score ~ 1 + Machine + (1 | Worker) + (0 + A + C | Worker)
## maxLMM_FE1_RE1: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## maxLMM_FE1_RE0: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## prsmLMM_FE1_RE1 8 236.58 252.49 -110.29 220.58
## prsmLMM_FE1_RE0 8 245.43 261.35 -114.72 229.43 0.000 0 1.000000
## maxLMM_FE1_RE1 10 236.42 256.31 -108.21 216.42 13.016 2 0.001492
## maxLMM_FE1_RE0 10 236.42 256.31 -108.21 216.42 0.000 0 < 2.2e-16
##
## prsmLMM_FE1_RE1
## prsmLMM_FE1_RE0
## maxLMM_FE1_RE1 **
## maxLMM_FE1_RE0 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
prsmLMM_FE1_RE1 and prsmLMM_FE1_RE0 are mathematically not equivalent.
Using the reference level (A) in prsmLMM_FE1_RE0 destroys mathematical equivalence. This is a good example that contrast specifications matter for mathematical equivalence.
Here I explore whether sum contrasts in prsmLMM_FE1_RE1 lead to mathematically equivalent goodness of fit in prsmLMM_FE1_RE0.
contrasts(d$Machine) <- contr.sum(3)
print(summary(prsmLMM_FE1_RE1 <- lmer(score ~ 1 + dA_GM + dB_GM + (1 | Worker) + (0 + dA_GM + dB_GM | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + dA_GM + dB_GM + (1 | Worker) + (0 + dA_GM + dB_GM |
## Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 239.5 255.5 -111.8 223.5 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.27099 -0.50449 -0.00538 0.45602 2.51023
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 22.8953 4.7849
## Worker.1 dA_GM 5.6165 2.3699
## dB_GM 11.6388 3.4116 -0.71
## Residual 0.9246 0.9616
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.9578 30.468
## dA_GM -7.2944 0.9851 -7.405
## dB_GM 0.6722 1.4050 0.478
##
## Correlation of Fixed Effects:
## (Intr) dA_GM
## dA_GM 0.000
## dB_GM 0.000 -0.701
print(summary(prsmLMM_FE1_RE0 <- lmer(score ~ 1 + Machine + (1 | Worker) + (0 + B + C | Worker), d, REML=FALSE)))
## Linear mixed model fit by maximum likelihood ['lmerMod']
## Formula: score ~ 1 + Machine + (1 | Worker) + (0 + B + C | Worker)
## Data: d
##
## AIC BIC logLik deviance df.resid
## 236.6 252.5 -110.3 220.6 46
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.29836 -0.50665 -0.01621 0.45950 2.42303
##
## Random effects:
## Groups Name Variance Std.Dev. Corr
## Worker (Intercept) 13.7151 3.7034
## Worker.1 B 29.1133 5.3957
## C 11.0432 3.3231 0.30
## Residual 0.9257 0.9621
## Number of obs: 54, groups: Worker, 6
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 59.6500 1.8021 33.101
## Machine1 -7.2944 0.9893 -7.373
## Machine2 0.6722 1.4119 0.476
##
## Correlation of Fixed Effects:
## (Intr) Machn1
## Machine1 -0.530
## Machine2 0.383 -0.710
anova(prsmLMM_FE1_RE1, prsmLMM_FE1_RE0, maxLMM_FE1_RE1, maxLMM_FE1_RE0)
## Data: d
## Models:
## prsmLMM_FE1_RE1: score ~ 1 + dA_GM + dB_GM + (1 | Worker) + (0 + dA_GM + dB_GM |
## prsmLMM_FE1_RE1: Worker)
## prsmLMM_FE1_RE0: score ~ 1 + Machine + (1 | Worker) + (0 + B + C | Worker)
## maxLMM_FE1_RE1: score ~ 1 + dBA + dCA + (1 + dBA + dCA | Worker)
## maxLMM_FE1_RE0: score ~ 1 + dBA + dCA + (0 + A + B + C | Worker)
## Df AIC BIC logLik deviance Chisq Chi Df Pr(>Chisq)
## prsmLMM_FE1_RE1 8 239.54 255.46 -111.77 223.54
## prsmLMM_FE1_RE0 8 236.58 252.49 -110.29 220.58 2.9698 0 <2e-16
## maxLMM_FE1_RE1 10 236.42 256.31 -108.21 216.42 4.1578 2 0.1251
## maxLMM_FE1_RE0 10 236.42 256.31 -108.21 216.42 0.0000 0 <2e-16
##
## prsmLMM_FE1_RE1
## prsmLMM_FE1_RE0 ***
## maxLMM_FE1_RE1
## maxLMM_FE1_RE0 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
For sum contrasts, prsmLMM_FE1_RE1 and prsmLMM_FE1_RE0 are never mathematically equivalent (3 tests).
Bates (2008, Slide 84-95) elaborated on “[i]nteractions of grouping factors and other covariates”. He distinguihes between two ways to define the interaction between a fixed factor and a random (grouping) factor:
Worker and for the Worker:Machine interaction, yielding random effects for Worker and Worker/Machine.intLMM <- fm1 <- lmer(score ~ 1 + Machine + (1 | Worker) + (1 | Worker:Machine), Machines)
Workermax_LMM_RE0 <- fm2 <- lmer(score ~ 1 + Machine + (0 + Machine | Worker), Machines)
Bates (2008, Slide 91) writes: “Although not obvious from the specifications, the model fits are nested. If the variance-covariance matrix for the vector-valued random effects [fm2, max_LMM_RE0] has a special form, called compound symmetry, the model reduces to model [fm1, int_LMM_RE0].” He goes on to show that fm2 fits marginally better than fm1, but it is the data from Worker 6 on Machine B that cause the necessity of the more complex model.
Bates’s (2008, Slide 95) main concern are “[T]radeoffs when defining interactions”. Specifically, taken verbatim from the slide:
lme4 package is the tendency to overspecify the number of random effects per level of a grouping factor.sessionInfo()
## R version 3.5.0 (2018-04-23)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS High Sierra 10.13.4
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] bindrcpp_0.2.2 forcats_0.3.0 stringr_1.3.1
## [4] dplyr_0.7.5 purrr_0.2.4 readr_1.1.1
## [7] tidyr_0.8.1 tibble_1.4.2 ggplot2_2.2.1
## [10] tidyverse_1.2.1 RePsychLing_0.0.4 lme4_1.1-18
## [13] Matrix_1.2-14
##
## loaded via a namespace (and not attached):
## [1] httr_1.3.1 jsonlite_1.5 splines_3.5.0
## [4] carData_3.0-1 modelr_0.1.2 assertthat_0.2.0
## [7] stats4_3.5.0 coin_1.2-2 cellranger_1.1.0
## [10] yaml_2.1.19 numDeriv_2016.8-1 pillar_1.2.3
## [13] backports_1.1.2 lattice_0.20-35 glue_1.2.0
## [16] digest_0.6.15 rvest_0.3.2 minqa_1.2.4
## [19] sandwich_2.4-0 colorspace_1.3-2 htmltools_0.3.6
## [22] plyr_1.8.4 psych_1.8.4 pkgconfig_2.0.1
## [25] broom_0.4.4 haven_1.1.1 xtable_1.8-2
## [28] mvtnorm_1.0-7 scales_0.5.0 openxlsx_4.0.17
## [31] rio_0.5.10 emmeans_1.2.1 car_3.0-0
## [34] TH.data_1.0-8 lazyeval_0.2.1 cli_1.0.0
## [37] mnormt_1.5-5 survival_2.42-3 magrittr_1.5
## [40] crayon_1.3.4 readxl_1.1.0 estimability_1.3
## [43] evaluate_0.10.1 nlme_3.1-137 MASS_7.3-50
## [46] xml2_1.2.0 foreign_0.8-70 tools_3.5.0
## [49] data.table_1.11.2 hms_0.4.2 multcomp_1.4-8
## [52] munsell_0.4.3 compiler_3.5.0 rlang_0.2.0
## [55] grid_3.5.0 nloptr_1.0.4 rstudioapi_0.7
## [58] labeling_0.3 rmarkdown_1.9 lmerTest_3.0-1.9001
## [61] codetools_0.2-15 gtable_0.2.0 abind_1.4-5
## [64] curl_3.2 reshape2_1.4.3 R6_2.2.2
## [67] zoo_1.8-1 lubridate_1.7.4 knitr_1.20
## [70] afex_0.20-2 utf8_1.1.4 bindr_0.1.1
## [73] rprojroot_1.3-2 modeltools_0.2-21 stringi_1.2.2
## [76] parallel_3.5.0 Rcpp_0.12.17 coda_0.19-1
## [79] tidyselect_0.2.4