Formation Stats 3 2 Mixed Models
Formation Stats 3 2 Mixed Models
G. San Martin
[email protected]
Centre Wallon de Recherche Agronomique
Modèles
Modèles Mixtes
Mixtes
Désavantages :
Les calculs impliqués sont beaucoup plus complexes mais paradoxalement
l'utilisation pratique est plus simple et plus flexible
(avec cependant un risque accru de ne pas comprendre ce qu'on fait...)
Les inférences sont généralement plus approximatives à moins d'utiliser
des méthodes de simulations souvent très lentes et moins "automatiques".
Plus récents et parfois moins connus mais de plus en plus utilisés et 5
enseignés
Modèles
Modèles Mixtes
Mixtes
2) les "modèles mixtes"
Avantages :
Beaucoup plus flexibles, modèles potentiellement très complexes et
impossibles à estimer avec des méthodes classiques
Les paramètres sont mieux estimés en particulier dans les designs non
balancés et dans un but prédictif
Les paramètres estimés sont souvent beaucoup plus faciles à interpréter
ou même à obtenir (ea "variance components")
Modèles Gaussiens, de poisson, Binomiaux, etc...
Permettent d'inclure des structures de corrélation spatiale, temporelle, etc...
6
Modèles
Modèles Mixtes
Mixtes
La définition même d'un effet aléatoire peut être très différente selon
les personnes.
7
Modèles
Modèles Mixtes
Mixtes
Effet fixe ou aléatoire ?
La question se pose uniquement pour des variables discrètes
(en général qualitatives) pouvant caractériser des groupes
d'observations
On considère qu'un effet est aléatoire si les valeurs possibles de
cette variable (niveaux) sont un échantillonnage aléatoire parmi un
grand nombre d'autres valeurs possibles.
On est pas intéressé à estimer une valeur moyenne pour chaque
niveau ni à comparer ces différents niveaux entre eux.
Si on recommençait l'expérience on utiliserait normalement d'autres
valeurs
Si la variable est considérée comme fixe, les résultats ne sont pas
généralisables à d'autres valeurs.
En pratique, pour un effet aléatoire on va juste estimer la variance
additionnelle provoquée par cet effet. Alors que pour un effet fixe, on
8
va estimer la valeur de chaque niveau
Modèles
Modèles Mixtes
Mixtes
Effet fixe ou aléatoire ?
# On élimine une bonne partie des données pour créer un jeu de données non balancé
set.seed(234) 12
d <- d[c(6, 9, 29, 42, 43, 55, 56, 58, 69, 70, 73, sample(x=76:nrow(d), nrow(d)/3)),]
Graphique : l'utilisation du package ggplot2 (ou lattice)
facilite fortement la représentation de données groupées...
library(ggplot2)
13
14
Modèles
Modèles Mixtes
Mixtes
Approche 1
Des modèles mixtes pour prendre en compte la non indépendance
des observations dans la matrice de variance covariance des résidus
Un problème avec cette approche est qu'on ne respecte pas une des
hypothèses les plus importantes du modèle : l'indépendance.
En effet, les points d'un même site ne sont vraisemblablement pas
indépendants
15
Modèles
Modèles Mixtes
Mixtes
Approche 1
ggplot(data=d, aes(y = y, x = year)) + geom_point(shape = 1) +
stat_smooth(method = "lm", se = FALSE, color = "red", lwd = 1) +
theme_bw()
16
Modèles
Modèles Mixtes
Mixtes
Approche 1
Un modèle mixte où on ajoute le facteur "site" comme effet aléatoire
peut être vu comme une régression classique où on estime
automatiquement la corrélation entre observations d'un même
groupe (site ici) et où on en tient compte dans le modèle.
20
Modèles
Modèles Mixtes
Mixtes
Approche 2
> modlm2 <- lm(y ~ year , data = d)
> summary(modlm2)
Coefficients: Modèle linéaire simple
Estimate Std. Error t value Pr(>|t|) ignorant les sites
(Intercept) 181.618 10.044 18.082 < 2e-16 ***
year -4.209 1.088 -3.869 0.000151 ***
> modlm <- lm(y ~ site + year -1, data = d) Modèle linéaire avec un
> summary(modlm) intercept par site.
Coefficients:
Estimate Std. Error t value Pr(>|t|)
sitesite_01 84.5877 27.7363 3.050 0.002709 ** La variance résiduelle est
sitesite_02 141.9577 39.7531 3.571 0.000478 *** nettement moindre au prix
sitesite_03 242.3775 28.6225 8.468 2.12e-14 ***
sitesite_04 104.2450 23.6282 4.412 1.95e-05 ***
de l'estimation de 34
(...) paramètres
sitesite_35 96.1940 15.1024 6.369 2.20e-09 *** supplémentaires
year -4.4802 0.7067 -6.339 2.56e-09 ***
> logLik(modlm) 21
'log Lik.' -922.9502 (df=37)
Modèles
Modèles Mixtes
Mixtes
Approche 2
Cette approche (modèle fixe) n'est pas mauvaise en soi mais elle nous
oblige à avoir dans le modèle un paramètre pour chaque site. Or, on est
souvent peu intéressé à comparer les différents sites entre eux.
Ces sites ont été choisis au hasard parmi une population de sites
possibles. Si on devait recommencer l'expérience, on utiliserait
vraisemblablement des sites différents.
Ce qui nous intéresse c'est de contrôler la variabilité supplémentaire dans
les données induite par l'effet "site".
Dans les modèles mixtes, on utilise les intercepts de chaque groupe pour
calculer leur variance (et une valeur moyenne) et on ne garde dans le
modèle que ces deux paramètres qui caractérisent la distribution
(gaussienne) de l'effet site.
Ce sont des "hyper-paramètres" basés eux-mêmes sur des paramètres.
On considère aussi que les conclusions seront généralisables à d'autres
sites contrairement au modèle fixe où les conclusions sont restreintes au
35 sites
22
Modèles
Modèles Mixtes
Mixtes
Approche 2
On peut donc présenter les modèles mixtes comme des modèles où
on a (au moins) deux termes d'erreur au lieu d'un :
1) les résidus classiques qui sont distribués selon une loi normale
avec une moyenne 0 et une variance sigma y caractérisant la
variabilité au sein des groupes
2) un terme d'erreur distribué selon une loi normale de moyenne 0 et
de variance sigma alpha caractérisant la variabilité entre les groupes
y i = α + X i β + η j [i ] + εi
2
ε∼ N (0, σ y ) Un "effet aléatoire" pour
chaque groupe j
2
η j∼ N ( 0,σ α )
23
Modèles
Modèles Mixtes
Mixtes
Approche 2
> library(lme4)
> mod <- lmer(y ~ year + (1|site), data = d)
NB : le modèle mixte est
> summary(mod) strictement identique au
Linear mixed model fit by REML ['lmerMod'] modèle de l'approche 1.
Formula: y ~ year + (1 | site) Seule la manière de l'envisager
Data: d
change
REML criterion at convergence: 1957.178
NB en pratique on a quand même estimé un intercept pour chaque site ce qui pose parfois24
problème pour savoir combien de degrés de liberté on doit réellement considérer en pratique
Modèles
Modèles Mixtes
Mixtes
Approche 2
On peut extraire les "effets aléatoires" qui sont donc les différences
de chaque groupe d'observations (sites ici) par rapport à la valeur
moyenne (intercept)
2
η j∼ N ( 0,σ α )
> se.ranef(mod)
$site On peut aussi extraire
> ranef(mod) [,1]
$site [1,] 11.094545 l'erreur standard de ces
(Intercept) [2,] 18.334710 effets aléatoires avec la
site_01 -75.183682 [3,] 11.094545 fonction se.ranef du
site_02 -24.633897 [4,] 7.953715
[5,] 7.953715
package arm (A.Gelman)
site_03 49.482512
site_04 -64.115219 [6,] 5.078373 Il y a aussi une copie
(…) [7,] 7.953715 dans le script mytoolbox.R
site_35 -77.701853 (…)
[35,] 3.729958
attr(,"class")
[1] "ranef.mer"
> round(mean(ranef(mod)$site$"(Intercept)"), 3)
[1] 0
> round(sd(ranef(mod)$site$"(Intercept)"), 1)
[1] 49.7 proche de σα 25
Modèles
Modèles Mixtes
Mixtes
Approche 2
Ce point de vue est typiquement celui que l'on retrouve dans les
essais expérimentaux en biologie/agronomie/médecine
et dans les plans expérimentaux classiques :
randomized blocs design, split-plots, latin squares, ...
26
Modèles
Modèles Mixtes
Mixtes
Approche 3
C'est sans doute l'approche la plus complexe mais c'est aussi la plus
flexible et celle qui offre le plus de possibilités en particulier pour des
études observatives complexes.
μ α =α Estime la différence
Estime directement d'intercept entre
l'intercept de chaque chaque groupe et la
groupe α j [i ]=α+ η j [ i ] moyenne générale
29
Modèles
Modèles Mixtes
Mixtes
Approche 3
(1|site) : l'intercept (1) varie par (|) groupe (site)
Random effects:
Groups Name Variance Std.Dev.
site (Intercept) 2785 52.78
σα
Residual 1483 38.51
Number of obs: 186, groups: site, 35 σy
Fixed effects:
Estimate Std. Error t value
(Intercept) 179.8739 11.0789 16.236
year -4.4922 0.6986 -6.431 α j ∼N (μ α , σ 2α )
μα 2
α j ∼N (μ α =179.87, σ α=2785)
30
Modèles
Modèles Mixtes
Mixtes
Approche 3
On peut extraire les intercepts pour chaque groupe (site)
> coef(mod)
$site
(Intercept) year Dans ce modèle la
site_01 104.6902 -4.492227 pente est identique
site_02 155.2400 -4.492227 pour tous les groupes
site_03 229.3564 -4.492227
site_04 115.7587 -4.492227
site_05 150.5484 -4.492227
(...)
site_35 102.1720 -4.492227
y i = α j [i ] + β j [i ] x 1i + εi
2 x1 = "year" ici
ε∼ N (0, σ y )
2
α j ∼N (μ α , σ α )
β j ∼N (μ β ,σ 2β )
32
Modèles
Modèles Mixtes
Mixtes
(1+year|site) : l'intercept (1) et la pente (year) varient par (|) groupe (site)
33
Modèles
Modèles Mixtes
Mixtes
Pour Info : on peut estimer un modèle sans estimer la corrélation entre les effets
aléatoires avec la syntaxe suivante :
> mod <- lmer(y ~ year + (1|site) + (0 + year|site), data = d)
> mod <- lmer(y ~ year + (1|site) + (-1 + year|site), data = d) # équivalent
> summary(mod)
Linear mixed model fit by REML ['lmerMod']
Formula: y ~ year + (1 | site) + (-1 + year | site)
Data: d
Random effects:
Groups Name Variance Std.Dev.
site (Intercept) 1734.67 41.649
site.1 year 24.84 4.984
Residual 953.63 30.881
Number of obs: 186, groups: site, 35 la corrélation n'est plus estimée
Fixed effects:
Estimate Std. Error t value
(Intercept) 178.682 9.140 19.55
year -4.431 1.063 -4.17
34
Modèles
Modèles Mixtes
Mixtes
Random slope model
On pourrait obtenir également un intercept et une pente pour chaque
site avec un modèle entièrement fixe en ajoutant le site comme effet
fixe et son interaction avec l'année
NB : On a enlevé l'intercept et l'effet year de manière à ce que modèle estime
directement l'intercept et la pente de chaque site et pas leurs différences
> modlm <- lm(y ~ site + year:site -1, data = d)
> summary(modlm)$coefficients
Estimate Std. Error t value Pr(>|t|)
sitesite_01 244.4085523 102.767872 2.3782584 1.901444e-02
sitesite_02 79.2346694 28.502679 2.7799025 6.337962e-03
sitesite_03 -435.6348296 504.263874 -0.8639025 3.894091e-01
sitesite_04 -17.6049811 150.436761 -0.1170258 9.070403e-01
sitesite_05 73.4145280 104.576243 0.7020192 4.840614e-01
(...)
sitesite_35 124.6591588 28.086560 4.4383919 2.063550e-05
sitesite_01:year -25.7896653 13.436292 -1.9194035 5.736863e-02
sitesite_03:year 49.7607714 40.308876 1.2344867 2.194953e-01
sitesite_04:year 6.2712571 13.194177 0.4753049 6.354558e-01
sitesite_05:year 2.2512028 9.681879 0.2325171 8.165426e-01
(...)
sitesite_35:year -9.4616126 4.539209 -2.0844189 3.929806e-02
36
37
Modèles
Modèles Mixtes
Mixtes
BLUPs : Best Linear Unbiased Predictors
Un des problèmes avec cette approche est que les estimations des
pentes et des intercepts peuvent être très mauvais en particulier
pour les sites où on a peu de données.
38
Modèles
Modèles Mixtes
Mixtes
BLUPs : Best Linear Unbiased Predictors
Les modèles mixtes vont avoir une meilleure estimation (les fameux
"BLUPs") des pentes et des intercepts en estimant une valeur
comprise entre deux cas extrêmes :
"Complete pooling" :
C'est le cas où on estime une seule pente et un seul intercept pour
l'ensemble des données en ignorant l'effet site : y ~ year (tous les
sites sont "poolés", rassemblés dans un seul groupe)
"No Pooling" :
C'est le cas où on estime une droite séparément pour chaque
groupe : y ~ year + site + year:site
39
Modèles
Modèles Mixtes
Mixtes
BLUPs : Best Linear Unbiased Predictors
C'est à dire pour ces deux derniers points quand la corrélation entre
valeurs d'un même groupe ("intraclass correlation coefficient)
diminue.
40
Modèles
Modèles Mixtes
Mixtes
BLUPs : Best Linear Unbiased Predictors
dev.new(18/2.54,18/2.54)
ggplot(data=d, aes(y = y, x = year)) +
geom_point(shape = 1) +
stat_smooth(method = "lm", se = FALSE, mapping =
aes( linetype = "No Pooling", color = "No Pooling")) +
geom_abline(intercept = coef(modlm2)[1], slope = coef(modlm2)[2],
mapping = aes(linetype = "Complete Pooling", color = "Complete Pooling")) +
geom_abline(data = partialpooling,
aes(intercept = int, slope = slope, linetype = "Partial Pooling",
color = "Partial Pooling")) +
scale_linetype_manual(name = "", values = c(2,1,3),
breaks = c("Complete Pooling","No Pooling", "Partial Pooling")) +
scale_color_manual(name = "", values = c("grey50","black","red"),
breaks = c("Complete Pooling","No Pooling", "Partial Pooling")) +
facet_wrap(~site) +
theme_bw() + theme(legend.position = "top", legend.key = element_rect(color = NA))
42
savepng()
lm(y ~ year) lm(y ~ site + site :year -1) lmer(y ~ year + (1+ year|site)
43
code pour le graphique de la dia
suivante
modlm <- lm(y ~ site + site:year -1, data = d)
modlm2 <- lm(y ~ year , data = d)
mod <- lmer(y ~ year + (1 + year|site), data = d)
nbobs <- data.frame(aggregate(d["y"], d["site"], length))
dev.new(16/2.54, 16/2.54)
par(mfrow = c(2,2), mar = c(3,3,3,1), mgp = c(1.75, 0.5, 0))
plot(y = int, x= nb, pch = 20, cex = 0.6, ylim = c(-150,300),
ylab = "Intercept \u00B1 se", xlab = "Number of observations",
main = "No Pooling Estimates")
abline(h = (coef(modlm2)[1]))
segments(x0=nb, y0=l, x1=nb, y1=u)
44
code pour le graphique de la dia
suivante (suite...)
n <- nrow(summary(modlm)$coefficients)
int <- summary(modlm)$coefficients[(nsites+1):n, 1]
se <- summary(modlm)$coefficients[(nsites+1):n, 2]
l = (int-se) ;u = (int+se)
nb2 <- nb[nbobs$y>1]
savepng()
45
Modèles
Modèles Mixtes
Mixtes
BLUPs : Best Linear Unbiased Predictors
47
Modèles
Modèles Mixtes
Mixtes
Random slope model : simulation des données
nsites <- 35 ; ny <- 15 ; n <- nsites * ny
y i = α j [i ] + β j [i ] x 1i + εi
Distribution Normale
ε∼ N (0, σ 2y ) Multivariée
(α j ,β j )∼MVN (μ , Σ)
μ=(μ α , μβ )
σα2 σ α β σ 2α
Σ=
( 2
σα β σ β
=
)(
ρσ α σ β
ρ σα σβ
σ 2β ) Matrice de Variance
covariance des
effets aléatoires
covariance correlation
49
Random slope model : avec covariance
nsites <- 35 ; ny <- 15 ; n <- nsites * ny
site <- paste("site", rep(sprintf("%02.0f", 1:nsites), each = ny), sep = "_")
year <- rep(1:ny, times = nsites)
library(MASS)
Σ=
(
σα β σ 2β )
set.seed(1)
effects <- mvrnorm(n = nsites, mu = mu, Sigma = vcovmat) (α j ,β j )∼MVN (μ , Σ)
int <- effects[,1]
slope <- effects[,2]
gamma <- c(int, slope)
Random effects:
Groups Name Variance Std.Dev. Corr
site (Intercept) 2760.50 52.540 NB : lmer estime la
year 30.72 5.543 -0.78
Residual 939.51 30.651 corrélation ("rho"), pas la
Number of obs: 186, groups: site, 35 covariance
Fixed effects:
Estimate Std. Error t value NB : la corrélation est encore plus
(Intercept) 175.960 10.910 16.128 difficile à estimer que la variance
year -7.677 1.159 -6.626 des effets aléatoires --> il faut
Correlation of Fixed Effects:
beaucoup de groupes et/ou de
(Intr) données par groupe pour l'estimer
year -0.821 précisément
51
Modèles
Modèles Mixtes
Mixtes
Approche 3 (suite) : modèles multiniveaux
La taille du site est une variable explicative au niveau des sites (elle
est la même pour toutes les observations d'un même site) qui
pourrait expliquer en partie les différences d'intercept
53
Modèles
Modèles Mixtes
Mixtes
Approche 3 (suite) : modèles multiniveaux
Le modèle devient alors :
y i = α j [i ] + β j [i ] x 1i + εi
2
ε∼ N (0, σ y )
α j ∼N (μ α , σ 2α )
2
β j ∼N (μ β ,σ β )
La pente moyenne est elle
même modélisée en fonction μβ =γ 0 + γ 1 u1j "dummy variable" 0/1
ici de u1 qui représente le pour les sites fauchés
type de gestion
pente pour les sites différence de pente pour les sites
pâturés fixée à -5 fauchés = -10
dans la simulation des leur pente est donc = -5-10 = -15
données
54
nsites <- 50 ; ny <- 15 ; n <- nsites * ny Simulation du jeu de données
# création des variables explicatives
site <- paste("site", rep(sprintf("%02.0f", 1:nsites), each = ny), sep = "_")
year <- rep(1:ny, times = nsites)
man_site <- rep(c("grazing", "mowing"), each = nsites/2)
man <- rep(man_site, each = ny)
60
Modèles
Modèles Mixtes
Mixtes
Approche 3 (suite) : modèles multiniveaux
"Two stage analysis"
61
Modèles
Modèles Mixtes
Mixtes
Approche 3 (suite) : modèles multiniveaux
"Two stage analysis"
> modlm <- lm(y ~ -1 + site + year:site , data = d)
> summary(modlm)
Coefficients: (2 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
sitesite_01 161.39442 18.90438 8.537 1.32e-14 ***
sitesite_02 183.35048 43.01644 4.262 3.54e-05 ***
sitesite_03 251.54816 26.31283 9.560 < 2e-16 ***
(...)
sitesite_01:year -8.68432 1.99937 -4.344 2.55e-05 ***
sitesite_02:year -2.07416 3.84494 -0.539 0.590365
sitesite_03:year NA NA NA NA
sitesite_04:year -11.87818 2.31851 -5.123 8.99e-07 ***
(...)
63
Modèles
Modèles Mixtes
Mixtes
Approche 3 (suite) : modèles multiniveaux
"Two stage analysis"
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -1.700 1.312 -1.295 0.202
manmowing -9.976 1.848 -5.397 2.29e-06 ***
64
Modèles
Modèles Mixtes
Mixtes Généralisés
Généralisés
Random effects:
Groups Name Variance Std.Dev. Corr
site (Intercept) 0.91807 0.95816
year 0.00208 0.04561 0.01
Number of obs: 262, groups: site, 35
Fixed effects:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 3.13155 0.16770 18.67 <2e-16 ***
year -0.11369 0.00966 -11.77 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Mais on part aussi souvent d'un modèle simple que l'on complexifie
progressivement en fonction des données, de leur quantité et de
notre capacité à interpréter un modèle plus complexe
Synthèse très très utile des échanges sur les mailing lists de R et
autres sources :
http://glmm.wikidot.com/faq
70
Inférence
Inférence et
et construction
construction du
du modèle
modèle
Quelques ressources utiles en particulier pour ce qui concerne les
stratégies de construction des modèles (ea de la partie aléatoire)
Un bel exemple concret et bien documenté : Lancelot, R., Lesnoff, M., Tillard, E., Mcdermott,
J.J., 2000. Graphical approaches to support the analysis of linear-multilevel models of lamb
pre-weaning growth in Kolda (Senegal). Prev. Vet. Med. 46, 225-247
71
http://forums.cirad.fr/logiciel-R/viewtopic.php?t=245&highlight=graphical+approaches++support+analysis
Version originale aussi sur ResearchGate
Inférence
Inférence et
et construction
construction du
du modèle
modèle
Construction du modèle
"Random intercepts
& random slopes" "facteurs aléatoires de groupe"
NB1 : la terminologie utilisée ici est sans doute tout sauf rigoureuse
mais on trouve très peu d'explications précises sur la syntaxe de lme4,
ce qu'on va tenter de faire ici tant bien que mal ...
"Random intercepts
"facteurs aléatoires de groupe"
& random slopes"
73
Inférence
Inférence et
et construction
construction du
du modèle
modèle
"Partie fixe" "Partie aléatoire"
"Random intercepts
"facteurs aléatoires de groupe"
& random slopes"
74
Inférence
Inférence et
et construction
construction du
du modèle
modèle
"Partie fixe" "Partie aléatoire"
"Random intercepts
"facteurs aléatoires de groupe"
& random slopes"
75
Inférence
Inférence et
et construction
construction du
du modèle
modèle
"Partie fixe" "Partie aléatoire"
"Random intercepts
& random slopes" "facteurs aléatoires de groupe"
Random slopes
On peut le voir comme une interaction entre les effets fixes A, B et A:B et
l'effet aléatoire site (cette interaction étant elle-même un effet aléatoire).
"Random intercepts
& random slopes" "facteurs aléatoires de groupe"
Random slopes
"Random intercepts
& random slopes" "facteurs aléatoires de groupe"
Random slopes
Le modèle estime par défaut les corrélations entre les random slopes et
intercepts par groupe. Pour fixer les corrélation à 0 il faudrait écrire sans
doute quelque chose comme :
78
Inférence
Inférence et
et construction
construction du
du modèle
modèle
"Partie fixe" "Partie aléatoire"
"Partie fixe"
"Partie fixe"
On peut aussi avoir une interaction entre une variable explicative au niveau
du site et au niveau des observations (qui varie pour chaque site) :
A + C + A:C + (A|site)
80
Inférence
Inférence et
et construction
construction du
du modèle
modèle
Construction de la partie aléatoire
81
Inférence
Inférence et
et construction
construction du
du modèle
modèle
Construction de la partie aléatoire
82
Inférence
Inférence et
et construction
construction du
du modèle
modèle
Construction de la partie aléatoire
On visualise bien la corrélation négative entre les On voit ici qu'il y a une assez forte
pentes et les intercepts. variabilité dans les pentes et les
On voit aussi qu'il y a des intercepts négatifs, intercepts mais vraisemblablement
preuve que le modèle n'est pas adapté et/ou que pas de corrélation 85
certaines estimations ne sont pas très bonnes
Inférence
Inférence
Inférence sur les effets fixes
> lmm <- lmer(y ~ year*man + (1 + year|site), data = d2)
> summary(lmm)
Random effects:
Groups Name Variance Std.Dev. Corr
site (Intercept) 943.19 30.71
year 27.56 5.25 0.19
Residual 675.75 26.00
Fixed effects:
Estimate Std. Error t value Pas de p-valeurs pour les
(Intercept) 198.797 8.232 24.148 modèles gaussiens
year -2.029 1.242 -1.634
manmowing -26.970 11.851 -2.276
year:manmowing -9.467 1.755 -5.395
88
Inférence
Inférence
Intervalles de confiance sur les paramètres
par parametric bootstrap
89
Inférence
Inférence
Intervalles de confiance sur les paramètres
par parametric bootstrap
> (CI <- confint(lmm, method = "boot", nsim = 500))
Computing bootstrap confidence intervals ...
Environs 30s de temps de
2.5 % 97.5 % calcul sur mon ordinateur
sd_(Intercept)|site 18.3520618 41.3101463
cor_year.(Intercept)|site -0.2150056 0.8659323
sd_year|site 3.7786824 6.7256251
sigma 23.2950131 28.8533389
(Intercept) 181.8152892 213.1364457 Paramètres permettant
year -4.4023085 0.5055391 d'obtenir une barre de
manmowing -50.4917731 -1.6039852 progression avec %
year:manmowing -13.1080706 -6.1892560
91
Inférence
Inférence
Intervalles de confiance sur les paramètres
par parametric bootstrap
confint() utilise la fonction bootMer() qui elle-même utilise
simulate(). On peut utiliser ces fonctions directement pour des
utilisations plus spécifiques
Fonction qui extrait tous les paramètres du modèle
à passer comme argument à bootMer
> f <- function(m) {return(c(getME(m, "theta")*sigma(m), sigma = sigma(m), fixef(m)))}
> b <- bootMer(lmm, FUN = f, nsim = 200)
> b$t[1:5,]
site.(Intercept) site.year.(Intercept) site.year sigma (Intercept) year
[1,] 0.7628365 0.18118504 0.1130103 29.31086 215.5557 -1.696027
[2,] 0.8103744 0.03499826 0.1556781 28.92839 201.3385 -0.378512
[3,] 0.8346103 0.06042532 0.1735899 25.91201 200.6700 -1.890946
[4,] 1.2545207 0.01279252 0.1878786 25.24632 200.0308 -2.814163
[5,] 1.1962980 0.03384101 0.1878064 27.18566 206.2372 -2.848562
manmowing year:manmowing
[1,] -42.58491 -10.415632 b$t contient 200 lignes correspondant aux 200
[2,] -40.22099 -11.362464
[3,] -29.93819 -9.436540 simulations avec les valeurs de chaque paramètre
[4,] -54.17401 -7.652619 extraites au moyen de la fonction f
[5,] -23.29053 -7.766572
92
Inférence
Inférence
Intervalles de confiance sur les paramètres
par parametric bootstrap
93
Inférence
Inférence
Intervalles de confiance sur les paramètres
par parametric bootstrap
Représentation graphique des distributions
dev.new(14/2.54, 7/2.54)
par(mfrow = c(2,4), mar = c(2,2,2,1))
for(i in 1:ncol(b$t)) {
plot(density(b$t[,i]), main = colnames(b$t)[i],
xlab = "", ylab = "")
abline(v = 0, col = "red")
abline(v = b$t0[i])
}
94
Inférence
Inférence
Tests de rapport de vraisemblance pour comparer les modèles.
NB : on ne peut comparer la vraisemblance de modèles estimés avec la méthode
REML lorsque leur partie fixe est différente.
La fonction anova réestime automatiquement le modèle avec l'option
REML=FALSE. Attention cependant si vous devez faire le test vous-même.
> mod1 <- lmer(y ~ year*man + (1 + year|site), data = d2)
> mod2 <- lmer(y ~ year+man + (1 + year|site), data = d2)
> mod3 <- lmer(y ~ year + (1 + year|site), data = d2)
> mod4 <- lmer(y ~ man + (1 + year|site), data = d2)
96
Inférence
Inférence
Tests de rapport de vraisemblance pour comparer les modèles.
> source("/home/gilles/stats/R/mytoolbox.R")
> Anova.lmer(lmm)
LR Chisq df p(>Chisq)
year 28.68242 1 0.0000
man 6.97149 1 0.0083
year:man 23.83863 1 0.0000
97
Inférence
Inférence
Tests de rapport de vraisemblance avec simulation
98
Inférence
Inférence
Tests de rapport de vraisemblance avec simulation
lrboot <- function(mod1,mod2) {
ysim <- simulate(mod2)
L1 <- logLik(refit(mod1,ysim))
L2 <- logLik(refit(mod2,ysim))
2*(L1-L2)
}
> library(pbkrtest)
> KRmodcomp(mod1, mod2)
stat ndf ddf F.scaling p.value
Ftest 28.837 1.000 44.945 1 2.668e-06 ***
> library(car)
> Anova(lmm, test="F")
Note: method with signature ‘sparseMatrix#ANY’ chosen for function ‘kronecker’,
target signature ‘dgCMatrix#ngCMatrix’.
"ANY#sparseMatrix" would also be valid
Analysis of Deviance Table (Type II Wald F tests with Kenward-Roger df)
Response: y
F Df Df.res Pr(>F)
year 59.008 1 44.951 1.013e-09 ***
man 11.803 1 43.977 0.001302 **
year:man 28.837 1 44.945 2.668e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Response: y
F Df Df.res Pr(>F)
(Intercept) 575.1032 1 39.443 < 2.2e-16 ***
year 2.6437 1 43.512 0.11118
man 5.1026 1 41.837 0.02916 *
year:man 28.8370 1 44.945 2.668e-06 ***
--- 104
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Inférence
Inférence