> Modules non standards > statsmodels > Introduction à statsmodels
Introduction à statsmodels
Statsmodels s'appuie sur pandas pour le stockage des données (comme les dataframes de R), et sur patsy pour décrire les modèles par des formules comme celles sous R.
Par convention dans statsmodels :
- endog sont les variables à predire (variables réponse)
- exog sont les variables prédictives (variables explicatives)
Si df est un dataframe pandas avec les colonnes A, B et C :
- faire d'abord : import patsy
- y, X = patsy.dmatrices('C ~ A + B', data = df, return_type = 'dataframe') : renvoie deux dataframes, y qui est le dataframe de la réponse et X le dataframe des variables indépendantes, avec une colonne supplémentaire Intercept qui est à 1.
Puis, on peut ajuster un modèle :
- faire d'abord import statsmodels.api
- puis, on définit le modèle, par exemple model = statsmodels.api.OLS(y, X)
- puis, on calcule le modèle : result = model.fit()
- puis, on peut voir le résultat : print(result.summary()) (result.summary().as_html() sous forme html, sous forme text avec as_text())
On peut aussi utiliser statsmodels.formula.api :
- faire import statsmodels.formula.api : il utilise en interne le module patsy.
- on peut utiliser directement la formule dans le modèle, et en général, le nom de la fonction est en minuscule : model = statsmodels.formula.api.ols('C ~ A + B', data = df)
- puis result = model.fit()
les résultats comportent le modèle et le modèle comporte les données :
- result.model : permet de récupérer le modèle.
- result.model.data : les données qui ont servi pour le modèle.
- result.model.data.endog : les variables à prédire.
- result.model.data.ynames : le nom des variables à prédire.
- result.model.data.exog : les variables indépendantes.
- result.model.data.xnames : le nom des variables indépendantes.
Variables de type catégories :
- si une variable de type string, elle est traitée automatiquement comme une catégorie.
- si une variable est entière et qu'on veut forcer son traitement comme une catégorie, faire dans la formule : 'C ~ C(A) + B' si on veut forcer A à être une catégorie.
Autres possibilités sur les formules :
- pour ne pas mettre d'ordonnée à l'origine : C ~ A + B -1
- pour introduire une interaction (multiplication) entre 2 variables : C ~ A + B + A:B
- pour introduire une dépendance par rapport au log de B : C ~ A + numpy.log(B)
- C ~ A * B est un raccourci pour C ~ A + B + A:B
- A / B : synonyme de A + A:B
- I (identity) permet de prendre le terme tel qu'il est sans interprétation. Par exemple : C ~ I(A + B) fait une régression de C en fonction de la somme de A et de B (c'est le + de python et non celui de patsy).
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert