Aller au contenu principal

53  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

La famille de modèles quasipoisson() n’est pas compatible avec lme4::glmer(). On privilégiera un modèle négatif binomial.

geepack::geeglm()
avec family = quasipoisson

Binomial négatif

RR
(risques relatifs)

MASS::glm.nb()

sjstats::svyglm.nb()

Alternative :
svrepmisc::svynb()

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))

La famille de modèles quasipoisson() n’est pas compatible avec lme4::glmer(). On privilégiera un modèle négatif binomial.

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))

sjstats::svyglm.nb()
et offset(log(denominateur))

Alternative :
svrepmisc::svynb()
avec offset(log(denominateur))

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

La famille de modèles quasibinomial() n’est pas compatible avec lme4::glmer().

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)

stats::glm()
avec family = binomial("log")

Alternative :
logbin::logbin()

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)

MASS::polr()

Alternative :
ordinal::clm()

Alternative :
VGAM::vglm()
avec family = VGAM::cumulative(
  parallel = TRUE
)

survey::svyolr()

Alternative :
svrepmisc::svyclm()

Alternative :
svyVGAM::svy_vglm()
avec family = VGAM::cumulative(
  parallel = TRUE
)

ordinal::clmm()

geepack::ordgee()

Alternative :
multgee::ordLORgee()

Catégorielle nominale
(3 modalités ou plus)

Régression logistique multinomiale

OR
(odds ratio)

nnet::multinom()

Alternative :
VGAM::vglm()
avec family = VGAM::multinomial

Alternative :
mlogit::mlogit()

svrepmisc::svymultinom()

Alternative :
svyVGAM::svy_vglm()
avec family = VGAM::multinomial

Voir note 2

multgee::nomLORgee()

Survie
(time to event)

Cox

HR
(hazard ratio)

survival::coxph()

survey::svycoxph()

survival::coxph()
avec un terme survival::frailty()

Alternative :
coxme::coxme()

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

pscl::zeroinfl()

Alternative :

glmtoolbox::zeroinf()

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

pscl::zeroinfl()
avec dist = "negbin"

Alternative :

glmtoolbox::zeroinf(family = "nbf(log)")

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()


  1. Voir aussi glmtoolbox::glmgee() ou gee::gee() comme alternative à geepack::geeglm().↩︎

  2. 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ée approximation 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 fonction mixcat::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.↩︎

  3. Cf. https://drizopoulos.github.io/GLMMadaptive/articles/ZeroInflated_and_TwoPart_Models.html↩︎