Deux packages

R fonctionne par packages. Un package est un ensemble d'algorithme, de commandes et autres permettant des opérations plus ou moins complexes. En gros, R peut faire des trucs tout seul mais pour faire des MLM, il vaut mieux passer par des packages.

Mais les packages sont développés par qui veut. Ce qui signifie qu'il y des bons packages et des mauvais packages. Les bons packages sont des packages qui... enfin bon, vous voyez la suite.

Classiquement, pour réaliser un MLM sous R, on utilise soit lme4, soit nlme. Voyons leurs spécificités (pas de panique, un tableau comparatif est proposé à la fin, vous pouvez y bondir de suite).

lme4

Ce package a été développé par Bates et al. (2015 ; nombreuses mises à jour) pour l'analyse de modèles linéaires mixtes et de modèles linéaires mixtes généralisés.

La différence entre les MLM et les MLMG se fait sur la VD : pour les MLMG, la VD peut ne pas suivre une distribution normale, contrairement aux MLM.

Syntaxe

Comme R fonctionne par lignes de commandes, les auteurs du lme4 ont essayé de simplifier les choses en proposant la syntaxe suivante :

model <- lmer(y ~ facteur.fixe.1 + facteur.fixe.2 + facteur.fixe.1:facteur.fixe.2 + (1|subjets), data=bdd, REML=F)

Détaillons cette commande :

model<- un grand classique de R qui signifie : "ce qui arrive après la "<-" sera enregistré dans un objet appelé "model".

lmer() est la fonction issue du package lme4 pour construire le modèle.

y est notre VD. La lettre doit être remplacée par le nom de la variable tel qu'il apparaît dans la base de donnée bdd.

~ signifie "voilà par quoi j'aimerais prédire ma VD".

facteur.fixe.1 et facteur.fixe.2 sont évidemment nos facteurs fixes. Comme pour la VD, nous devons utiliser leurs noms tels qu'ils apparaissent dans la base de données bdd.

+ signifie : "ajoute l'argument (le facteur fixe) suivant"

: signifie : "interaction". + facteur.fixe.1:facteur.fixe.2 signifie donc : "ajoute l'interaction entre le facteur fixe 1 et le facteur fixe 2.

Petite subtilité : plutôt que d'écrire facteur.fixe.1 + facteur.fixe.2 + facteur.fixe.1:facteur.fixe.2, j'aurais aussi pu écrire : facteur.fixe.1*facteur.fixe.2. Le * permet de stipuler tous les effets de tous les ordres des facteurs stipulés autour de lui.

facteur.fixe.1*facteur.fixe.2*facteur.fixe.3 est la même chose que facteur.fixe.1+facteur.fixe.2+facteur.fixe.3+facteur.fixe.1:facteur.fixe.2+facteur.fixe.1:facteur.fixe.3+facteur.fixe.2+facteur.fixe.3+facteur.fixe.1+facteur.fixe.2:facteur.fixe.3

(1|sujets) stipule les effets aléatoires. Ici, nous avons "j'autorise chaque sujet à avoir son propre intercept"

data=bdd Nous permet de dire à partir de quelle base de données nous voulons construire le modèle

REML=F Veut dire "n'utilise pas la méthode REML, utilise plutôt la méthode ML"

Syntaxe, les effets aléatoires

Avec la fonction lmer(), nous pouvons spécifier des relations entre les facteurs aléatoires. C'est l'exemple du sujet qui appartient à une classe qui appartient à une école, etc.

Test et interprétation du modèle

lme4 ne vous donnera pas de valeurs p. Quoi quoi quoi ??? Mais mais mais ??? La raison est statistique mais relève aussi d'un choix des auteurs. Pour faire simple : calculer les ddl (qui conditionnent les valeurs p) pour les différents coefficients (facteurs) est aussi simple dans les MLM que de compter le nombre de pièces de Lego dans une construction. Les relations entre les facteurs sont complexes, les observations souvent corrélées, etc. Or, pour se baser sur une statistique appelant une valeur p, il faut bien des ddl.

Heureusement, il existe des alternatives :

  • Utiliser le package lmerTest qui fournit des valeurs p approximatives basées sur des ddl à la Satterthwaite ou Kenward-Roger

  • Utiliser les indices de vraisemblance

Sans entrer dans les détails, l'approximation de Satterthwaite est peu coûteuse et souvent utilisée pour des modèles relativement simples alors que l'approximation de Kenward-Roger est plus pertinente pour des modèles assez complexes, notamment au niveau des effets aléatoires. D'expérience, les ddl diffèrent mais pas la décision statistique.

nlme

Ce package a été développé par Pinheiro & Bates (2000 ; nombreuses mises à jour) pour l'analyse de modèles linéaires et non linéaires mixtes.

Comme le nom l'indique, les modèles non linéaires mixtes permettent de stipuler des liens...non linéaires (un peu comme le lien entre la consommation d'alcool et la créativité). Oui, dit comme ça, c'est idiot mais c'est aussi un peu idiot de considérer que nos variables sont liées de manière linéaire, non ? Mais étant dans un livre portant sur les MLM, nous allons considérer que ce n'est pas si idiot que ça.

Syntaxe

Là aussi, les auteurs ont été sympas avec les utilisateurs et ils ont proposé une syntaxe pour construire et analyser nos modèles. Et en plus, elle ressemble fortement à celle de lme4 :

model <- lme(y ~ facteur.fixe.1 + facteur.fixe.2, random = ~ 1 | sujet, data = bdd)

La syntaxe étant similaire, son interprétation équivaut à celle de lmer

model<- un grand classique de R qui signifie : "ce qui arrive après la "<-" sera enregistré dans un objet appelé "model".

lmer() est la fonction issue du package lme4 pour construire le modèle.

y est notre VD. La lettre doit être remplacée par le nom de la variable tel qu'il apparaît dans la base de donnée bdd.

~ signifie "voilà par quoi j'aimerais prédire ma VD".

facteur.fixe.1 et facteur.fixe.2 sont évidemment nos facteurs fixes. Comme pour la VD, nous devons utiliser leurs noms tels qu'ils apparaissent dans la base de données bdd.

+ signifie : "ajoute l'argument (le facteur fixe) suivant"

: signifie : "interaction". + facteur.fixe.1:facteur.fixe.2 signifie donc : "ajoute l'interaction entre le facteur fixe 1 et le facteur fixe 2.

Petite subtilité : plutôt que d'écrire facteur.fixe.1 + facteur.fixe.2 + facteur.fixe.1:facteur.fixe.2, j'aurais aussi pu écrire : facteur.fixe.1*facteur.fixe.2. Le * permet de stipuler tous les effets de tous les ordres des facteurs stipulés autour de lui.

facteur.fixe.1*facteur.fixe.2*facteur.fixe.3 est la même chose que facteur.fixe.1+facteur.fixe.2+facteur.fixe.3+facteur.fixe.1:facteur.fixe.2+facteur.fixe.1:facteur.fixe.3+facteur.fixe.2+facteur.fixe.3+facteur.fixe.1+facteur.fixe.2:facteur.fixe.3

Petite différence toutefois pour les effets aléatoires :

random = ~ 1 | sujet est différent de lmer mais veut dire la même chose.

Syntaxe, les effets aléatoires

Tout comme la fonction lmer(), la fonction lme() permet de stipuler l'emboîtement de facteurs aléatoire. Mais en plus, elle permet de modéliser les corrélation entre ces facteurs.

En vérité, lmer() peut également le faire, dans une certaine mesure. Il suffit de stipuler des interactions entre les facteurs aléatoires, de la même manière que pour les effets fixes :(random1:random2|random2). Je n'ai jamais testé, ni avec lmer() ni avec lme(). D'une part, je m'intéresse tout de même plus aux effets fixes qu'aux effets aléatoire et d'autre part, plus le modèle est complexe, plus il faut de données. Dans ce cas, autant privilégier la complexité des relations entre les effets fixes, non ?

Test et interprétation du modèle

Avec le package nlme, nous pouvons avoir nos fameuses valeur p. Pourquoi ? Parce que c'est plus simple pour l'utilisateur. L'argument paraît simpliste mais pas tant que ça en réalité. nlme utilise également une approximation mais au niveau des tests inférentiels appliqués aux effets (les tests de Wald). Le hic, c'est que ces tests offrent une approximation plutôt fiable surtout dans les cas de modèles plutôt simples et d'échantillons plutôt élevés. Notez que je dis "plutôt", simplement parce que je n'ai pas trouvé de valeurs seuils fiables et consensuels sur la complexité du modèle ou le nombre d'observations nécessaires. Cela étant dit, je n'ai pas souvent noté de grandes différences entre les deux packages sur mes propres modèles.

Comparaison des deux packages[EN CONSTRUCTION]

lme4
nlme

Usage

Se veux super rigoureux et précis

Se veut pratique

Modèles

Modèles linéaires et non linéaires mixtes

Modèles linéaires mixtes & modèles linéaires généralisés mixtes

Méthode d'estimation

ML & REML

ML & REML

Effets aléatoires

Peut modéliser les structures les plus complexes

Peut modéliser les structures les plus courantes

Tests d'effets fixes

Fournit des valeurs p sur la base de tests de Wald

N'en fournit pas Utiliser lmerTest

Mis à jour