Mis a jour le 2025-04-14, 12:10

Modèle linéaire généralisé

Modèle de Poisson

Permet de modéliser des comptes (la variable prédite est à valeurs entières).
3 formes :
  • forme avec la classe directement : mdl = statsmodels.discrete.discrete_model.Poisson(y, X), mais si on a des variables nominales à k niveaux, il faut les recoder en k variables qui prennent des valeurs 0 ou 1.
  • en utilisant une fonction plus simple : mdl = statsmodels.discrete.discrete_model.Poisson.from_formula('y ~ x1 + x2', data = df) : si variables nominales, elles sont automatiquement recodées !
  • ou même avec une fonction encore plus simple mdl = statsmodels.formula.api.poisson('y ~ x1 + x2', data = df)
Fitting :
  • mdl est de type statsmodels.discrete.discrete_model.Poisson
  • on fitte ensuite le modèle : result = mdl.fit()
Résultats :
  • result.summary() : donne les résultats de prédiction.
  • result.summary2() : alternative, notamment avec le AIC et BIC
  • mdl.endog : la valeur de la variable prédite (y)
  • mdl.exog : les valeurs des variables indépendantes (X)
  • result.params : les paramètres du modèle (coefficients)
  • result.pvalues : les p-values du modèle
  • result.resid_response : les résidus.
  • mdl.loglike(result.params) : le log likelihood du modèle (doit être le plus élevé possible)
  • mdl.loglikeobs(result.params) : le log likelihood de chaque observation
  • mdl.predict(result.params, statsmodels.api.add_constant(X1)) : pour faire la prédiction sur des nouvelles variables (il ne faut pas oublier d'ajouter la colonne de 1 pour l'ordonnée à l'origine)

Modèle de Negative Binomial

Il faut l'utiliser pour estimer des comptes quand la variance est plus grande que la moyenne (et donc modèle de Poisson n'est pas valide).
3 formes, comme Poisson :
  • forme avec la classe directement : statsmodels.discrete.discrete_model.NegativeBinomial(y, X, alpha = 1), mais si on a des variables nominales à k niveaux, il faut les transformer (voir Poisson)
  • en utilisation une fonction plus simple : statsmodels.discrete.discrete_model.NegativeBinomial.from_formula('y ~ x1 + x2', data = df)
  • ou même avec une fonction encore plus simple mdl = statsmodels.formula.api.negativebinomial('y ~ x1 + x2', data = df)
  • par défaut, le paramètre alpha gouverne la variance : variance = moyenne + alpha * moyenne ^ 2
Fitting :
  • mdl est de type statsmodels.discrete.discrete_model.NegativeBinomial
  • on fitte ensuite le modèle : result = mdl.fit()
Résultats :
  • voir le fitting avec Poisson.
  • le summary indique la valeur de alpha

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert