Résumé
On dit en effet souvent que si tous les niveaux de facteurs possibles sont inclus dans un modèle mixte, alors ce facteur doit être traité comme un effet fixe. Ce n'est pas nécessairement vrai POUR DEUX RAISONS DISTINCTES:
(1) Si le nombre de niveaux est élevé, il peut être judicieux de traiter le facteur [croisé] comme aléatoire.
Je suis d'accord avec @Tim et @RobertLong ici: si un facteur a un grand nombre de niveaux qui sont tous inclus dans le modèle (comme par exemple tous les pays du monde; ou toutes les écoles d'un pays; ou peut-être la population entière de les sujets sont sondés, etc.), alors il n'y a rien de mal à le traiter comme aléatoire --- cela pourrait être plus parcimonieux, pourrait fournir un certain rétrécissement, etc.
lmer(size ~ age + subjectID) # fixed effect
lmer(size ~ age + (1|subjectID)) # random effect
(2) Si le facteur est imbriqué dans un autre effet aléatoire, alors il doit être traité comme aléatoire, indépendamment de son nombre de niveaux.
Il y avait une énorme confusion dans ce fil (voir les commentaires) parce que les autres réponses concernent le cas # 1 ci-dessus, mais l'exemple que vous avez donné est un exemple d'une situation différente , à savoir ce cas # 2. Ici, il n'y a que deux niveaux (c'est-à-dire pas du tout "un grand nombre"!) Et ils épuisent toutes les possibilités, mais ils sont imbriqués dans un autre effet aléatoire , produisant un effet aléatoire imbriqué.
lmer(size ~ age + (1|subject) + (1|subject:side) # side HAS to be random
Discussion détaillée de votre exemple
Les côtés et les sujets de votre expérience imaginaire sont liés comme les classes et les écoles dans l'exemple de modèle hiérarchique standard. Peut-être que chaque école (# 1, # 2, # 3, etc.) a une classe A et une classe B, et ces deux classes sont censées être à peu près les mêmes. Vous ne modéliserez pas les classes A et B comme un effet fixe avec deux niveaux; Ce serait une erreur. Mais vous ne modéliserez pas non plus les classes A et B comme un effet aléatoire "séparé" (c'est-à-dire croisé) avec deux niveaux; ce serait aussi une erreur. Au lieu de cela, vous modéliserez les classes comme un effet aléatoire imbriqué à l' intérieur des écoles.
Voir ici: Effets aléatoires croisés vs imbriqués: en quoi diffèrent-ils et comment sont-ils correctement spécifiés dans lme4?
i=1…nj=1,2
Sizeijk=μ+α⋅Heightijk+β⋅Weightijk+γ⋅Ageijk+ϵi+ϵij+ϵijk
ϵi∼N(0,σ2subjects),Random intercept for each subject
ϵij∼N(0,σ2subject-side),Random int. for side nested in subject
ϵijk∼N(0,σ2noise),Error term
Comme vous l'avez écrit vous-même, "il n'y a aucune raison de croire que le pied droit sera en moyenne plus grand que le pied gauche". Il ne devrait donc pas y avoir d'effet "global" (ni fixe ni croisé au hasard) du pied droit ou gauche du tout; à la place, chaque sujet peut être pensé comme ayant «un» pied et «un autre» pied, et cette variabilité devrait être incluse dans le modèle. Ces pieds "un" et "un autre" sont imbriqués dans les sujets, d'où des effets aléatoires imbriqués.
Plus de détails en réponse aux commentaires. [26 sept.]
Mon modèle ci-dessus inclut Side comme effet aléatoire imbriqué dans Subjects. Voici un modèle alternatif, proposé par @Robert, où Side est un effet fixe:
Sizeijk=μ+α⋅Heightijk+β⋅Weightijk+γ⋅Ageijk+δ⋅Sidej+ϵi+ϵijk
ij
Ça ne peut pas.
Il en va de même pour le modèle hypothétique de @ gung avec Side comme effet aléatoire croisé:
Sizeijk=μ+α⋅Heightijk+β⋅Weightijk+γ⋅Ageijk+ϵi+ϵj+ϵijk
Il ne tient pas compte non plus des dépendances.
Démonstration via une simulation [2 octobre]
Voici une démonstration directe dans R.
Je génère un ensemble de données de jouets avec cinq sujets mesurés sur les deux pieds pendant cinq années consécutives. L'effet de l'âge est linéaire. Chaque sujet a une interception aléatoire. Et chaque sujet a un des pieds (gauche ou droit) plus grand qu'un autre.
set.seed(17)
demo = data.frame(expand.grid(age = 1:5,
side=c("Left", "Right"),
subject=c("Subject A", "Subject B", "Subject C", "Subject D", "Subject E")))
demo$size = 10 + demo$age + rnorm(nrow(demo))/3
for (s in unique(demo$subject)){
# adding a random intercept for each subject
demo[demo$subject==s,]$size = demo[demo$subject==s,]$size + rnorm(1)*10
# making the two feet of each subject different
for (l in unique(demo$side)){
demo[demo$subject==s & demo$side==l,]$size = demo[demo$subject==s & demo$side==l,]$size + rnorm(1)*7
}
}
plot(1:50, demo$size)
Toutes mes excuses pour mes terribles compétences en R. Voici à quoi ressemblent les données (chaque cinq points consécutifs représente un pied d'une personne mesuré au fil des ans; chaque dix points consécutifs représente deux pieds de la même personne):
Maintenant, nous pouvons adapter un tas de modèles:
require(lme4)
summary(lmer(size ~ age + side + (1|subject), demo))
summary(lmer(size ~ age + (1|side) + (1|subject), demo))
summary(lmer(size ~ age + (1|subject/side), demo))
Tous les modèles incluent un effet fixe age
et un effet aléatoire de subject
, mais traitent side
différemment.
side
age
t=1.8
side
age
t=1.4
side
age
t=37
Cela montre clairement que cela side
devrait être traité comme un effet aléatoire imbriqué.
Enfin, dans les commentaires, @Robert a suggéré d'inclure l'effet global de side
comme variable de contrôle. Nous pouvons le faire, tout en conservant l'effet aléatoire imbriqué:
summary(lmer(size ~ age + side + (1|subject/side), demo))
summary(lmer(size ~ age + (1|side) + (1|subject/side), demo))
side
t=0.5side