Chapitre 18 Modèle final
Les même méthodes peuvent être utilisées avec un GLMM ou un LMM pour choisir entre des modèles avec différentes ordonnées à l’origine et/ou pentes aléatoires ainsi que pour choisir les effets fixes à conserver dans le modèle final.
En voici deux:
- une approche de la théorie de l’information (e.g., AICc - Atelier 5)
- une approche fréquentiste (où l’importance de chaque terme est évaluée en faisant un test de rapport de vraisemblance; LRT, avec la fonction
anova()
)
Nous dérivons d’abord les modèles potentiels et les comparons en utilisant l’AICc:
<- glmer(total.fruits ~ nutrient * amd + rack + status +
mpl1 1 | X) + (1 | popu) + (1 | gen), data = dat.tf, family = "poisson",
(control = glmerControl(optimizer = "bobyqa"))
<- update(mpl1, . ~ . - rack) # modèle sans rack
mpl2 <- update(mpl1, . ~ . - status) # modèle sans status
mpl3 <- update(mpl1, . ~ . - amd:nutrient) # modèle sans interaction amd:nutrient
mpl4
<- MuMIn::model.sel(mpl1, mpl2, mpl3, mpl4)
aic_tab round(aic_table <- aic_tab[, c("AICc", "delta", "df")], digits = 2)) (
## AICc delta df
## mpl1 5015.73 0.00 10
## mpl4 5017.11 1.38 9
## mpl3 5017.22 1.49 8
## mpl2 5070.75 55.02 9
Nous ne couvrons pas tous les modèles possibles ci-dessus, cependant, l’interaction amd:nutriments
ne peut être évaluée que si les effets additifs de amd et de nutriments sont présents dans le modèle.
Nous pouvons aussi utiliser les fonctions drop1()
et dfun()
pour évaluer nos effets fixes (dfun()
convertit les valeurs AIC retournées par drop1()
en valeurs \(\Delta\)AIC)
<- drop1(mpl1, test = "Chisq")
dd_LRT <- dfun(drop1(mpl1))) (dd_AIC
## Single term deletions
##
## Model:
## total.fruits ~ nutrient * amd + rack + status + (1 | X) + (1 |
## popu) + (1 | gen)
## npar dAIC
## <none> 0.000
## rack 1 55.083
## status 2 1.612
## nutrient:amd 1 1.444
- Fort effet de rack (dAIC = 55.08 si on enlève cette variable)
- Effets de status et de l’interaction sont faibles (dAIC < 2)
Commençons par enlever l’interaction non significative afin de tester les effets principaux de nutriments et d’herbivorie.
<- update(mpl1, . ~ . - amd:nutrient)
mpl2
<- update(mpl2, . ~ . - rack) # pas de rack ou d'interaction
mpl3 <- update(mpl2, . ~ . - status) # pas de status ou d'interaction
mpl4 <- update(mpl2, . ~ . - nutrient) # pas de nutrient ou d'interaction
mpl5 <- update(mpl2, . ~ . - amd) # pas d'herbivorie ou d'interaction mpl6
Sélectionnez le meilleur modèle avec la méthode de votre choix:
Méthode par AICc<- MuMIn::model.sel(mpl2, mpl3, mpl4, mpl5, mpl6)
aic_tab2 round(aic_table2 <- aic_tab2[, c("AICc", "delta", "df")], digits = 2)) (
## AICc delta df
## mpl2 5017.11 0.00 9
## mpl4 5018.28 1.17 7
## mpl6 5027.27 10.16 8
## mpl3 5071.28 54.17 8
## mpl5 5152.74 135.63 8
Méthode avec drop1()
<- drop1(mpl2, test = "Chisq")
dd_LRT2 <- dfun(drop1(mpl2)) dd_AIC2
Quels sont nos constats ?
Les nutriments et l’herbivorie ont un effet important (grand changement d’AIC de \(135.6\) (mpl5
) et \(10.2\) (mpl6
) si l’un ou l’autre sont supprimés, respectivement).
Notre modèle final inclut donc :
Effets fixes * nutriments, * herbivorie * la variable nuisance de rack.
Effets aléatoires
* effet du niveau d’observation (1|X)
* populations (1|popu)
* génotypes (1|gen)
18.1 Défi 9
En utilisant l’ensemble de données inverts
(temps de développement larvaire (PLD
) de 74 espèces d’invertébrés et vertébrés marins élevés à différentes températures et temps), répondez aux questions suivantes:
- Quel est l’effet du type d’alimentation et du climat (effets fixes) sur
PLD
? - Est-ce que cette relation varie selon les taxons (effets aléatoires)?
- Quelle est la meilleure famille de distributions pour ces données?
- Finalement, une fois que vous avez déterminé la meilleure famille de distribution, re-évaluez vos effets fixes et aléatoires.
Défi 9 Solution:
# inverts <- read.csv('data/inverts.csv', header = TRUE)
# head(inverts) table(inverts$temp, inverts$feeding.type)
# mod.glm <- glm(PLD ~ temp + feeding.type, family =
# poisson(), data = inverts) summary(mod.glm)
# drop1(mod.glm, test = 'Chisq')
# boxplot(PLD ~ temp, data = inverts) boxplot(PLD ~
# feeding.type, data = inverts)
# boxplot(predict(mod.glm, type = 'response')~inverts$temp)
# plot()
# modglm <- glm(PLD ~ temp + feeding.type, family =
# poisson(), data = inverts)
# r2 <- ranef(mpl1, condVar = TRUE) d2 <- dotplot(r2,
# par.settings = pp)
# plot(aggregate(PLD ~ taxon, FUN = mean, data =
# inverts)[,2], aggregate(PLD ~ taxon, FUN = var, data =
# inverts)[,2], pch = 19) abline(a = 0, b = 1, lty = 2)
# mod.glmer <- glmer.nb(PLD ~ temp + feeding.type +
# (1|taxon), data = inverts) mod.glm <- glm.nb(PLD ~ temp +
# feeding.type, family = poisson(), data = inverts)
# plot(aggregate(PLD ~ taxon, FUN = var, data =
# inverts)[,2], aggregate(PLD ~ taxon, FUN = mean, data =
# inverts)[,2]) abline(a = 0, b = 1, lty = 2 )