48 Quel modèle choisir ?
La tableau synthétique ci-dessous permet d’identifier rapidement quelle fonction utiliser en fonction du type de variable à expliquer, du type de distribution et de la famille de modèles (modèle de base, modèle avec prise en compte du plan d’échantillonnage, modèle mixte ou modèle GEE).
Variable à expliquer | Type de distribution | Interprétation des coefficients | Modèle de base | Échantillonnage complexe | Modèle mixte | GEE1 |
---|---|---|---|---|---|---|
Continue | Linéaire | directe | stats::lm() |
lme4::lmer() |
||
Gaussien | directe | stats::glm() avec family = gaussian |
survey::svyglm() avec family = gaussian |
lme4::glmer() avec family = gaussian |
geepack::geeglm() avec family = gaussian |
|
Comptage (nombre d’occurences) |
Poisson | RR (risques relatifs) |
stats::glm() avec family = poisson |
survey::svyglm() avec family = poisson |
lme4::glmer() avec family = poisson |
geepack::geeglm() avec family = poisson |
Quasi-Poisson | RR (risques relatifs) |
stats::glm() avec family = quasipoisson |
survey::svyglm() avec family = quasipoisson |
lme4::glmer() avec family = quasipoisson |
geepack::geeglm() avec family = quasipoisson |
|
Binomial négatif | RR (risques relatifs) |
MASS::glm.nb() |
Alternative : |
lme4::glmer.nb() |
||
Incidence / Taux / Ratio | Poisson avec offset |
IRR (incidence rate ratio) |
stats::glm() avec family = poisson et offset(log(denominateur)) |
survey::svyglm() avec family = poisson et offset(log(denominateur)) |
lme4::glmer() avec family = poisson et offset(log(denominateur)) |
geepack::geeglm() avec family = poisson et offset(log(denominateur)) |
Quasi-Poisson avec offset |
IRR (incidence rate ratio) |
stats::glm() avec family = quasipoisson et offset(log(denominateur)) |
survey::svyglm() avec family = quasipoisson et offset(log(denominateur)) |
lme4::glmer() avec family = quasipoisson et offset(log(denominateur)) |
geepack::geeglm() avec family = quasipoisson et offset(log(denominateur)) |
|
Binomial négatif avec offset |
IRR (incidence rate ratio) |
MASS::glm.nb() avec offset(log(denominateur)) |
Alternative : |
lme4::glmer.nb() avec offset(log(denominateur)) |
||
Binaire (oui / non) |
Logistique (logit) |
OR (odds ratio) |
stats::glm() avec family = binomial |
survey::svyglm() avec family = binomial |
lme4::glmer() avec family = binomial |
geepack::geeglm() avec family = binomial |
Quasi-binomial (logit) |
OR (odds ratio) |
stats::glm() avec family = quasibinomial |
survey::svyglm() avec family = quasibinomial |
lme4::glmer() avec family = quasibinomial |
geepack::geeglm() avec family = quasibinomial |
|
Probit | pas interprétable directement | stats::glm() avec family = binomial("probit") |
survey::svyglm() avec family = binomial("probit") |
lme4::glmer() avec family = binomial("probit") |
geepack::geeglm() avec family = binomial("probit") |
|
Log binomial | PR (prevalence ratio) |
Alternative : |
survey::svyglm() avec family = binomial("log") |
lme4::glmer() avec family = binomial("log") |
geepack::geeglm() avec family = binomial("log") |
|
Poisson | PR (prevalence ratio) |
stats::glm() avec family = poisson |
survey::svyglm() avec family = poisson |
lme4::glmer() avec family = poisson |
geepack::geeglm() avec family = poisson |
|
Catégorielle ordinale (3 modalités ou plus) |
Régression logistique ordinale | OR (odds ratio) |
Alternative : Alternative : |
Alternative : Alternative : |
ordinal::clmm() |
Alternative : |
Catégorielle nominale (3 modalités ou plus) |
Régression logistique multinomiale | OR (odds ratio) |
Alternative : Alternative : |
Alternative : |
Voir note 2 | multgee::nomLORgee() |
Survie (time to event) |
Cox | HR (hazard ratio) |
survival::coxph() |
survey::svycoxph() |
Alternative : |
survival::coxph() avec l’option cluster |
Modèle à temps discret binomial (cloglog) |
HR (hazard ratio) |
stats::glm() avec family = binomial("cloglog") |
survey::svyglm() avec family = binomial("cloglog") |
lme4::glmer() avec family = binomial("cloglog") |
geepack::geeglm() avec family = binomial("cloglog") |
|
Accelerated failure time (AFT) |
HR (hazard ratio) |
survival::survreg() |
survey::svysurvreg() |
survival::survreg() avec un terme survival::frailty() |
survival::survreg() avec l’option cluster |
|
Comptage avec surreprésentation de zéros | Zero-inflated Poisson | OR & RR |
Alternative :
|
sjstats::svyglm.zip() |
GLMMadaptive::mixed_model() avec family = zi.poisson() 3 |
|
Hurdle Poisson model | OR & RR | pscl::hurdle() |
GLMMadaptive::mixed_model() avec family = hurdle.poisson() |
|||
Zero-inflated negative binomial | OR & RR |
Alternative :
|
sjstats::svyglm.zip() avec dist = "negbin" |
GLMMadaptive::mixed_model() avec family = zi.negative.binomial() |
||
Hurdle negative binomial model | OR & RR | pscl::hurdle() avec dist = "negbin" |
GLMMadaptive::mixed_model() avec family = hurdle.negative.binomial() |
Voir aussi
glmtoolbox::glmgee()
ougee::gee()
comme alternative àgeepack::geeglm()
.↩︎Il n’y a pas de solution évidente.
L’approche la plus simple consiste à réaliser plusieurs modèles logistiques binaires séparés à l’aide de
lme4::glmer()
. Si la variable à expliquer a trois niveaux (A, B et C), on pourra réaliser un modèle binaire B vs A, et un modèle binaire C vs A. Cette approche est appeléeapproximation de Begg et Gray
. On trouvera, en anglais, plus d’explications et des références bibliographiques sur StackOverflow.Une approche alternative, dans un contexte bayésien et non fréquentiste, est d’avoir recours à
brms::brm()
qui peut gérer ce type de modèles. Cette approche, avec des exemples de code, est mentionnée sur StackOverflow.Dans le cadre d’une approche fréquentiste, la fonction
mgcv::gam()
est mentionnée sur StackExchange, de même que la fonctionmixcat::npmlt()
(voir ce post), sachant que le package{mixcat}
est faiblement documenté et ne semble plus forcément maintenu.Enfin, il semble possible d’avoir recours à
MCMCglmm::MCMCglmm()
, selon cette réponse sur StackOverflowet ce billet de blog.↩︎Cf. https://drizopoulos.github.io/GLMMadaptive/articles/ZeroInflated_and_TwoPart_Models.html↩︎