Comment effectuer un test Wald en Python
Un test de Wald peut être utilisé pour tester si un ou plusieurs paramètres d’un modèle sont égaux à certaines valeurs.
Ce test est souvent utilisé pour déterminer si une ou plusieurs variables prédictives dans un modèle de régression sont égales à zéro.
Nous utilisons les hypothèses nulles et alternatives suivantes pour ce test :
- H 0 : Certains ensembles de variables prédictives sont toutes égales à zéro.
- H A : Toutes les variables prédictives de l’ensemble ne sont pas égales à zéro.
Si nous ne parvenons pas à rejeter l’hypothèse nulle, nous pouvons alors supprimer l’ensemble spécifié de variables prédictives du modèle, car elles n’offrent pas d’amélioration statistiquement significative de l’ajustement du modèle.
L’exemple suivant montre comment effectuer un test Wald en Python
Exemple : test de Wald en Python
Pour cet exemple, nous utiliserons le célèbre jeu de données mtcars pour adapter le modèle de régression linéaire multiple suivant :
mpg = β 0 + β 1 disp + β 2 carb + β 3 ch + β 4 cyl
Le code suivant montre comment ajuster ce modèle de régression et afficher le résumé du modèle :
import statsmodels.formula.api as smf import pandas as pd import io #define dataset as string mtcars_data="""model,mpg,cyl,disp,hp,drat,wt,qsec,vs,am,gear,carb Mazda RX4,21,6,160,110,3.9,2.62,16.46,0,1,4,4 Mazda RX4 Wag,21,6,160,110,3.9,2.875,17.02,0,1,4,4 Datsun 710,22.8,4,108,93,3.85,2.32,18.61,1,1,4,1 Hornet 4 Drive,21.4,6,258,110,3.08,3.215,19.44,1,0,3,1 Hornet Sportabout,18.7,8,360,175,3.15,3.44,17.02,0,0,3,2 Valiant,18.1,6,225,105,2.76,3.46,20.22,1,0,3,1 Duster 360,14.3,8,360,245,3.21,3.57,15.84,0,0,3,4 Merc 240D,24.4,4,146.7,62,3.69,3.19,20,1,0,4,2 Merc 230,22.8,4,140.8,95,3.92,3.15,22.9,1,0,4,2 Merc 280,19.2,6,167.6,123,3.92,3.44,18.3,1,0,4,4 Merc 280C,17.8,6,167.6,123,3.92,3.44,18.9,1,0,4,4 Merc 450SE,16.4,8,275.8,180,3.07,4.07,17.4,0,0,3,3 Merc 450SL,17.3,8,275.8,180,3.07,3.73,17.6,0,0,3,3 Merc 450SLC,15.2,8,275.8,180,3.07,3.78,18,0,0,3,3 Cadillac Fleetwood,10.4,8,472,205,2.93,5.25,17.98,0,0,3,4 Lincoln Continental,10.4,8,460,215,3,5.424,17.82,0,0,3,4 Chrysler Imperial,14.7,8,440,230,3.23,5.345,17.42,0,0,3,4 Fiat 128,32.4,4,78.7,66,4.08,2.2,19.47,1,1,4,1 Honda Civic,30.4,4,75.7,52,4.93,1.615,18.52,1,1,4,2 Toyota Corolla,33.9,4,71.1,65,4.22,1.835,19.9,1,1,4,1 Toyota Corona,21.5,4,120.1,97,3.7,2.465,20.01,1,0,3,1 Dodge Challenger,15.5,8,318,150,2.76,3.52,16.87,0,0,3,2 AMC Javelin,15.2,8,304,150,3.15,3.435,17.3,0,0,3,2 Camaro Z28,13.3,8,350,245,3.73,3.84,15.41,0,0,3,4 Pontiac Firebird,19.2,8,400,175,3.08,3.845,17.05,0,0,3,2 Fiat X1-9,27.3,4,79,66,4.08,1.935,18.9,1,1,4,1 Porsche 914-2,26,4,120.3,91,4.43,2.14,16.7,0,1,5,2 Lotus Europa,30.4,4,95.1,113,3.77,1.513,16.9,1,1,5,2 Ford Pantera L,15.8,8,351,264,4.22,3.17,14.5,0,1,5,4 Ferrari Dino,19.7,6,145,175,3.62,2.77,15.5,0,1,5,6 Maserati Bora,15,8,301,335,3.54,3.57,14.6,0,1,5,8 Volvo 142E,21.4,4,121,109,4.11,2.78,18.6,1,1,4,2""" #convert string to DataFrame df = pd.read_csv(io.StringIO(mtcars_data), sep=",") #fit multiple linear regression model results = smf.ols('mpg ~ disp + carb + hp + cyl', df).fit() #view regression model summary results.summary() coef std err t P>|t| [0.025 0.975] Intercept34.0216 2.523 13.482 0.000 28.844 39.199 disp -0.0269 0.011 -2.379 0.025 -0.050 -0.004 carb -0.9269 0.579 -1.601 0.121 -2.115 0.261 hp 0.0093 0.021 0.452 0.655 -0.033 0.052 cyl -1.0485 0.784 -1.338 0.192 -2.657 0.560
Ensuite, nous pouvons utiliser la fonction wald_test() de statsmodels pour tester si les coefficients de régression pour les variables prédictives « hp » et « cyl » sont tous deux égaux à zéro.
Le code suivant montre comment utiliser cette fonction en pratique :
#perform Wald Test to determine if 'hp' and 'cyl' coefficients are both zero print(results.wald_test('(hp = 0, cyl = 0)')) F test: F=array([[0.91125429]]), p=0.41403001184235005, df_denom=27, df_num=2
À partir du résultat, nous pouvons voir que la valeur p du test est de 0,414 .
Puisque cette valeur p n’est pas inférieure à 0,05, nous ne parvenons pas à rejeter l’hypothèse nulle du test de Wald.
Cela signifie que nous pouvons supposer que les coefficients de régression pour les variables prédictives « hp » et « cyl » sont tous deux égaux à zéro.
Nous pouvons supprimer ces termes du modèle car ils n’améliorent pas statistiquement de manière significative l’ajustement global du modèle.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes en Python :
Comment effectuer une régression linéaire simple
Comment effectuer une régression polynomiale en Python
Comment calculer VIF en Python