Académique Documents
Professionnel Documents
Culture Documents
c:\Python36_x64\lib\site-packages\statsmodels\compat\pandas.py:56:
FutureWarning: The pandas.core.datetools module is deprecated and will be
removed in a future version. Please use the pandas.tseries module instead.
from pandas.core import datetools
On va utiliser la fameuse base des Iris qu’on peut appeler depuis la librairie seaborn. Pour chaque fleur, on
a des informations sur la longueur et largeur de ses sépales ainsi que de ses pétales.
Pour comprendre la différence en image : Sépale.
[3]: iris = sns.load_dataset("iris")
iris.head()
1
[4]: sns.pairplot(iris, hue="species");
Grâce à ces graphiques, on observere une forte relation entre longeur et la largeur des pétales. On réalise
une regression à une variable entre la longueur et la largeur grâce à seaborn.
2
Si on observe bien qu’une relation existe, on ne connait pas grand chose d’autre.
# On fit le modele
model = linear_model.LinearRegression()
results = model.fit(X, y)
-0.363075521319 [ 0.41575542]
La meilleure approximation linéaire est donc y=a+bx avec - a=¿0.363075521319 - b=0.41575542
Mais en termes de présentation de résultats, c’est un peu limité… Pas de standard errors, pas de R2 etc (du
moins pas automatiquement)
3
[8]: model = sm.OLS(y, X)
results = model.fit()
# Avec statsmodel, on a une sortie qui ressemble beaucoup à celle de R
print(results.summary())
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly
specified.
Si vous regardez de plus près, vous observez que les coefficients des deux régressions sont proches mais pas
égaux. Problème de précision ? Non…
Il faut faire attention avec statsmodels, il n’inclut pas de lui-même un intercept (β0 ) alors que scikit learn le
fait.
[9]: X = iris["petal_length"]
X = np.vander(X, 2) #ici on ajoute
y = iris["petal_width"]
model = sm.OLS(y, X)
results = model.fit()
print(results.summary())
4
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
x1 0.4158 0.010 43.387 0.000 0.397 0.435
const -0.3631 0.040 -9.131 0.000 -0.442 -0.285
==============================================================================
Omnibus: 5.765 Durbin-Watson: 1.455
Prob(Omnibus): 0.056 Jarque-Bera (JB): 5.555
Skew: 0.359 Prob(JB): 0.0622
Kurtosis: 3.611 Cond. No. 10.3
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly
specified.
Ca y est, les coefficients de scikit et de statsmodels sont quasi identiques (en réalité si vous regardez après
la 10ème décimale, ils sont légèrement différents…)
Si on regadre le R2 , on se dit qu’on est plutôt pas mal pour cette régression (en même temps, dire que pour
un iris, la longueur et la largeur du pétale sont corrélées, c’est un peu normal…)’
Mais voyons si on peut aller encore plus loin, par exemple, en ajoutant l’information de l’espèce de l’iris,
avec des variables catégorielles (qu’on ajoutera sous la forme d’indicatries ou dummies)
[10]: dummies = pd.get_dummies(iris["species"])
iris = pd.concat([iris, dummies], axis=1)
iris.head()
versicolor virginica
0 0 0
1 0 0
2 0 0
3 0 0
4 0 0
model = sm.OLS(y, X)
results = model.fit()
print(results.summary())
5
Dep. Variable: petal_width R-squared: 0.946
Model: OLS Adj. R-squared: 0.944
Method: Least Squares F-statistic: 845.5
Date: Sun, 24 Sep 2017 Prob (F-statistic): 4.88e-92
Time: 20:12:38 Log-Likelihood: 46.704
No. Observations: 150 AIC: -85.41
Df Residuals: 146 BIC: -73.37
Df Model: 3
Covariance Type: nonrobust
================================================================================
coef std err t P>|t| [0.025 0.975]
--------------------------------------------------------------------------------
const 0.2501 0.098 2.561 0.011 0.057 0.443
petal_length 0.2304 0.034 6.691 0.000 0.162 0.298
setosa -0.3410 0.051 -6.655 0.000 -0.442 -0.240
versicolor 0.0944 0.054 1.751 0.082 -0.012 0.201
virginica 0.4967 0.096 5.150 0.000 0.306 0.687
==============================================================================
Omnibus: 6.210 Durbin-Watson: 1.736
Prob(Omnibus): 0.045 Jarque-Bera (JB): 9.578
Skew: -0.110 Prob(JB): 0.00832
Kurtosis: 4.218 Cond. No. 1.69e+16
==============================================================================
Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly
specified.
[2] The smallest eigenvalue is 9.68e-30. This might indicate that there are
strong multicollinearity problems or that the design matrix is singular.
Avec cette version, on s’améliore en termes de R2 mais la précision de notre estimateur est plus faible…
Pour aller plus loin, de nombreux exemples sont disponibles là :
• OLS
• GLS
• Regression quantile
[12]: