Personnaliser les préférences

Nous utilisons des cookies pour vous aider à naviguer efficacement et à exécuter certaines fonctions. Vous trouverez ci-dessous des informations détaillées sur tous les cookies sous chaque catégorie de consentement.

Les cookies classés comme « Nécessaires » sont stockés sur votre navigateur car ils sont essentiels pour activer les fonctionnalités de base du site.... 

Toujours actif

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

Aucun cookie à afficher.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

Aucun cookie à afficher.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

Aucun cookie à afficher.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

Aucun cookie à afficher.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

Aucun cookie à afficher.

Comment effectuer une régression des moindres carrés pondérés en Python



L’une des hypothèses clés de la régression linéaire est que les résidus sont distribués avec une variance égale à chaque niveau de la variable prédictive. Cette hypothèse est connue sous le nom d’homoscédasticité .

Lorsque cette hypothèse n’est pas respectée, on dit que l’hétéroscédasticité est présente dans les résidus. Lorsque cela se produit, les résultats de la régression deviennent peu fiables.

Une façon de résoudre ce problème consiste à utiliser la régression des moindres carrés pondérés , qui attribue des poids aux observations de telle sorte que celles avec une faible variance d’erreur reçoivent plus de poids car elles contiennent plus d’informations par rapport aux observations avec une plus grande variance d’erreur.

Ce didacticiel fournit un exemple étape par étape de la façon d’effectuer une régression des moindres carrés de poids en Python.

Étape 1 : Créer les données

Tout d’abord, créons le DataFrame pandas suivant qui contient des informations sur le nombre d’heures étudiées et la note de l’examen final pour 16 étudiants d’une classe :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'hours': [1, 1, 2, 2, 2, 3, 4, 4, 4, 5, 5, 5, 6, 6, 7, 8],
                   'score': [48, 78, 72, 70, 66, 92, 93, 75, 75, 80, 95, 97,
                             90, 96, 99, 99]})

#view first five rows of DataFrame
print(df.head())

   hours  score
0      1     48
1      1     78
2      2     72
3      2     70
4      2     66

Étape 2 : Ajuster le modèle de régression linéaire simple

Ensuite, nous utiliserons les fonctions du module statsmodels pour ajuster un modèle de régression linéaire simple en utilisant les heures comme variable prédictive et le score comme variable de réponse :

import statsmodels.api as sm

#define predictor and response variables
y = df['score']
X = df['hours']

#add constant to predictor variables
X = sm.add_constant(x)

#fit linear regression model
fit = sm.OLS(y, X).fit()

#view model summary
print(fit.summary())

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  score   R-squared:                       0.630
Model:                            OLS   Adj. R-squared:                  0.603
Method:                 Least Squares   F-statistic:                     23.80
Date:                Mon, 31 Oct 2022   Prob (F-statistic):           0.000244
Time:                        11:19:54   Log-Likelihood:                -57.184
No. Observations:                  16   AIC:                             118.4
Df Residuals:                      14   BIC:                             119.9
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         60.4669      5.128     11.791      0.000      49.468      71.465
hours          5.5005      1.127      4.879      0.000       3.082       7.919
==============================================================================
Omnibus:                        0.041   Durbin-Watson:                   1.910
Prob(Omnibus):                  0.980   Jarque-Bera (JB):                0.268
Skew:                          -0.010   Prob(JB):                        0.875
Kurtosis:                       2.366   Cond. No.                         10.5

À partir du résumé du modèle, nous pouvons voir que la valeur R au carré du modèle est de 0,630 .

Connexes : Qu’est-ce qu’une bonne valeur R au carré ?

Étape 3 : Ajuster le modèle des moindres carrés pondérés

Ensuite, nous pouvons utiliser la fonction WLS() de statsmodels pour effectuer des moindres carrés pondérés en définissant les poids de telle manière que les observations avec une variance plus faible reçoivent plus de poids :

#define weights to use
wt = 1 / smf.ols('fit.resid.abs() ~ fit.fittedvalues', data=df).fit().fittedvalues**2

#fit weighted least squares regression model
fit_wls = sm.WLS(y, X, weights=wt).fit()

#view summary of weighted least squares regression model
print(fit_wls.summary())

                            WLS Regression Results                            
==============================================================================
Dep. Variable:                  score   R-squared:                       0.676
Model:                            WLS   Adj. R-squared:                  0.653
Method:                 Least Squares   F-statistic:                     29.24
Date:                Mon, 31 Oct 2022   Prob (F-statistic):           9.24e-05
Time:                        11:20:10   Log-Likelihood:                -55.074
No. Observations:                  16   AIC:                             114.1
Df Residuals:                      14   BIC:                             115.7
Df Model:                           1                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         63.9689      5.159     12.400      0.000      52.905      75.033
hours          4.7091      0.871      5.407      0.000       2.841       6.577
==============================================================================
Omnibus:                        2.482   Durbin-Watson:                   1.786
Prob(Omnibus):                  0.289   Jarque-Bera (JB):                1.058
Skew:                           0.029   Prob(JB):                        0.589
Kurtosis:                       1.742   Cond. No.                         17.6
==============================================================================

À partir du résultat, nous pouvons voir que la valeur R au carré pour ce modèle des moindres carrés pondérés a augmenté jusqu’à 0,676 .

Cela indique que le modèle des moindres carrés pondérés est capable d’expliquer une plus grande partie de la variance des résultats aux examens que le modèle de régression linéaire simple.

Cela nous indique que le modèle des moindres carrés pondérés offre un meilleur ajustement aux données par rapport au modèle de régression linéaire simple.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes en Python :

Comment créer un tracé résiduel en Python
Comment créer un tracé QQ en Python
Comment tester la multicolinéarité en Python

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *