Comment extraire les valeurs P de la régression linéaire dans les modèles statistiques



Vous pouvez utiliser les méthodes suivantes pour extraire les valeurs p pour les coefficients dans un ajustement de modèle de régression linéaire à l’aide du module statsmodels en Python :

#extract p-values for all predictor variables
for x in range (0, 3):
    print(model.pvalues[x])

#extract p-value for specific predictor variable name
model.pvalues.loc['predictor1']

#extract p-value for specific predictor variable position
model.pvalues[0]

Les exemples suivants montrent comment utiliser chaque méthode dans la pratique.

Exemple : Extraire les valeurs P de la régression linéaire dans les modèles statistiques

Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur les heures étudiées, les examens préparatoires passés et la note finale reçue par les étudiants d’une certaine classe :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6],
                   'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2],
                   'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96]})

#view head of DataFrame
df.head()

	hours	exams	score
0	1	1	76
1	2	3	78
2	2	3	85
3	4	5	88
4	2	2	72

Nous pouvons utiliser la fonction OLS() du module statsmodels pour ajuster un modèle de régression linéaire multiple , en utilisant « heures » et « examens » comme variables prédictives et « score » comme variable de réponse :

import statsmodels.api as sm

#define predictor and response variables
y = df['score']
x = df[['hours', 'exams']]

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

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

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

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  score   R-squared:                       0.718
Model:                            OLS   Adj. R-squared:                  0.661
Method:                 Least Squares   F-statistic:                     12.70
Date:                Fri, 05 Aug 2022   Prob (F-statistic):            0.00180
Time:                        09:24:38   Log-Likelihood:                -38.618
No. Observations:                  13   AIC:                             83.24
Df Residuals:                      10   BIC:                             84.93
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         71.4048      4.001     17.847      0.000      62.490      80.319
hours          5.1275      1.018      5.038      0.001       2.860       7.395
exams         -1.2121      1.147     -1.057      0.315      -3.768       1.344
==============================================================================
Omnibus:                        1.103   Durbin-Watson:                   1.248
Prob(Omnibus):                  0.576   Jarque-Bera (JB):                0.803
Skew:                          -0.289   Prob(JB):                        0.669
Kurtosis:                       1.928   Cond. No.                         11.7
==============================================================================

Par défaut, la fonction summary() affiche les valeurs p de chaque variable prédictive jusqu’à trois décimales :

  • Valeur P pour l’interception : 0,000
  • Valeur P pour les heures : 0,001
  • Valeur P pour les examens : 0,315

Cependant, nous pouvons extraire les valeurs p complètes pour chaque variable prédictive du modèle en utilisant la syntaxe suivante :

#extract p-values for all predictor variables
for x in range (0, 3):
    print(model.pvalues[x])

6.514115622692573e-09
0.0005077783375870773
0.3154807854805659

Cela nous permet de voir les valeurs p avec plus de décimales :

  • Valeur P pour l’interception : 0,00000000651411562269257
  • Valeur P pour les heures : 0,0005077783375870773
  • Valeur P pour les examens : 0,3154807854805659

Remarque : Nous avons utilisé 3 dans notre fonction range() car il y avait trois coefficients totaux dans notre modèle de régression.

Nous pouvons également utiliser la syntaxe suivante pour extraire spécifiquement la valeur p pour la variable « heures » :

#extract p-value for 'hours' only
model.pvalues.loc['hours']

0.0005077783375870773

Ou nous pourrions utiliser la syntaxe suivante pour extraire la valeur p du coefficient d’une variable dans une position spécifique du modèle de régression :

#extract p-value for coefficient in index position 0
model.pvalues[0]

6.514115622692573e-09

Ressources additionnelles

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

Comment effectuer une régression logistique en Python
Comment calculer l’AIC des modèles de régression en Python
Comment calculer le R-carré ajusté en Python

Ajouter un commentaire

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