Comment effectuer un test de rapport de vraisemblance en Python
Un test du rapport de vraisemblance compare la qualité de l’ajustement de deux modèles de régression emboîtés.
Un modèle imbriqué est simplement un modèle qui contient un sous-ensemble de variables prédictives dans le modèle de régression global.
Par exemple, supposons que nous ayons le modèle de régression suivant avec quatre variables prédictives :
Y = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 3 + β 4 x 4 + ε
Un exemple de modèle imbriqué serait le modèle suivant avec seulement deux des variables prédictives d’origine :
Y = β 0 + β 1 x 1 + β 2 x 2 + ε
Pour déterminer si ces deux modèles sont significativement différents, nous pouvons effectuer un test du rapport de vraisemblance qui utilise les hypothèses nulles et alternatives suivantes :
H 0 : Le modèle complet et le modèle imbriqué s’ajustent aussi bien aux données. Ainsi, vous devez utiliser le modèle imbriqué .
H A : Le modèle complet s’adapte nettement mieux aux données que le modèle imbriqué. Vous devez donc utiliser le modèle complet .
Si la valeur p du test est inférieure à un certain niveau de signification (par exemple 0,05), nous pouvons alors rejeter l’hypothèse nulle et conclure que le modèle complet offre un ajustement nettement meilleur.
L’exemple étape par étape suivant montre comment effectuer un test de rapport de vraisemblance en Python.
Étape 1 : Charger les données
Dans cet exemple, nous allons montrer comment ajuster les deux modèles de régression suivants en Python à l’aide des données de l’ensemble de données mtcars :
Modèle complet : mpg = β 0 + β 1 disp + β 2 carb + β 3 ch + β 4 cyl
Modèle réduit : mpg = β 0 + β 1 disp + β 2 carb
Tout d’abord, nous allons charger l’ensemble de données :
from sklearn.linear_model import LinearRegression import statsmodels.api as sm import pandas as pd import scipy #define URL where dataset is located url = "https://raw.githubusercontent.com/Statology/Python-Guides/main/mtcars.csv" #read in data data = pd.read_csv(url)
Connexe : Comment lire des fichiers CSV avec Pandas
Étape 2 : Ajuster les modèles de régression
Tout d’abord, nous allons ajuster le modèle complet et calculer la log-vraisemblance du modèle :
#define response variable y1 = data['mpg'] #define predictor variables x1 = data[['disp', 'carb', 'hp', 'cyl']] #add constant to predictor variables x1 = sm.add_constant(x1) #fit regression model full_model = sm.OLS(y1, x1).fit() #calculate log-likelihood of model full_ll = full_model.llf print(full_ll) -77.55789711787898
Ensuite, nous ajusterons le modèle réduit et calculerons la log-vraisemblance du modèle :
#define response variable y2 = data['mpg'] #define predictor variables x2 = data[['disp', 'carb']] #add constant to predictor variables x2 = sm.add_constant(x2) #fit regression model reduced_model = sm.OLS(y2, x2).fit() #calculate log-likelihood of model reduced_ll = reduced_model.llf print(reduced_ll) -78.60301334355185
Étape 3 : Effectuer le test de log-vraisemblance
Ensuite, nous utiliserons le code suivant pour effectuer le test de vraisemblance :
#calculate likelihood ratio Chi-Squared test statistic
LR_statistic = -2*(reduced_ll-full_ll)
print(LR_statistic)
2.0902324513457415
#calculate p-value of test statistic using 2 degrees of freedom
p_val = scipy.stats.chi2.sf(LR_statistic, 2)
print(p_val)
0.35165094613502257
À partir du résultat, nous pouvons voir que la statistique du test du chi carré est de 2,0902 et la valeur p correspondante est de 0,3517 .
Puisque cette valeur p n’est pas inférieure à 0,05, nous ne parviendrons pas à rejeter l’hypothèse nulle.
Cela signifie que le modèle complet et le modèle imbriqué s’adaptent aussi bien aux données. Nous devons donc utiliser le modèle imbriqué, car les variables prédictives supplémentaires du modèle complet n’offrent pas d’amélioration significative de l’ajustement.
Ainsi, notre modèle final serait :
mpg = β 0 + β 1 disp + β 2 glucides
Remarque : Nous avons utilisé 2 degrés de liberté lors du calcul de la valeur p car cela représentait la différence entre le total des variables prédictives utilisées entre les deux modèles.
Ressources additionnelles
Les didacticiels suivants fournissent des informations supplémentaires sur l’utilisation des modèles de régression en Python :
Un guide complet de la régression linéaire en Python
Comment effectuer une régression polynomiale en Python
Comment effectuer une régression logistique en Python