Hoe u een waarschijnlijkheidsratiotest uitvoert in python
Een waarschijnlijkheidsratiotest vergelijkt de ‚goodness of fit‘ van twee geneste regressiemodellen .
Een genest model is eenvoudigweg een model dat een subset van voorspellende variabelen in het algehele regressiemodel bevat.
Stel dat we bijvoorbeeld het volgende regressiemodel hebben met vier voorspellende variabelen:
Y = β 0 + β 1 x 1 + β 2 x 2 + β 3 x 3 + β 4 x 4 + ε
Een voorbeeld van een genest model is het volgende model met slechts twee van de oorspronkelijke voorspellende variabelen:
Y = β 0 + β 1 x 1 + β 2 x 2 + ε
Om te bepalen of deze twee modellen significant van elkaar verschillen, kunnen we een waarschijnlijkheidsratiotest uitvoeren waarbij gebruik wordt gemaakt van de volgende nul- en alternatieve hypothesen:
H 0 : Het volledige model en het geneste model passen even goed bij de gegevens. U moet dus een genest model gebruiken .
H A : Het volledige model past aanzienlijk beter bij de gegevens dan het geneste model. U moet dus het volledige sjabloon gebruiken .
Als de p-waarde van de test onder een bepaald significantieniveau ligt (bijvoorbeeld 0,05), kunnen we de nulhypothese verwerpen en concluderen dat het volledige model een significant betere fit biedt.
In het volgende stapsgewijze voorbeeld ziet u hoe u een waarschijnlijkheidsratiotest in Python uitvoert.
Stap 1: Gegevens laden
In dit voorbeeld laten we zien hoe je de volgende twee regressiemodellen in Python kunt passen met behulp van gegevens uit de mtcars -gegevensset:
Volledig model: mpg = β 0 + β 1 beschikbaar + β 2 carb + β 3 pk + β 4 cil
Model: mpg = β 0 + β 1 beschikbaar + β 2 carb
Eerst laden we de dataset:
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/Statorials/Python-Guides/main/mtcars.csv" #read in data data = pd. read_csv (url)
Gerelateerd: CSV-bestanden lezen met Panda’s
Stap 2: Pas de regressiemodellen aan
Eerst zullen we het volledige model fitten en de log-waarschijnlijkheid van het model berekenen:
#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
Vervolgens passen we het gereduceerde model aan en berekenen we de log-waarschijnlijkheid van het model:
#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
Stap 3: Voer de logwaarschijnlijkheidstest uit
Vervolgens zullen we de volgende code gebruiken om de plausibiliteitstest uit te voeren:
#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
Uit het resultaat kunnen we zien dat de chikwadraattoetsstatistiek 2,0902 is en de overeenkomstige p-waarde 0,3517 .
Omdat deze p-waarde niet kleiner is dan 0,05, zullen we er niet in slagen de nulhypothese te verwerpen.
Dit betekent dat het volledige model en het geneste model even goed bij de gegevens passen. We moeten daarom het geneste model gebruiken, omdat de extra voorspellende variabelen in het volledige model geen significante verbetering van de fit opleveren.
Ons uiteindelijke model zou dus zijn:
mpg = β 0 + β 1 beschikbaar + β 2 koolhydraten
Opmerking : We gebruikten 2 vrijheidsgraden bij het berekenen van de p-waarde, omdat dit het verschil vertegenwoordigde in de totale voorspellende variabelen die tussen de twee modellen werden gebruikt.
Aanvullende bronnen
De volgende tutorials bieden aanvullende informatie over het gebruik van regressiemodellen in Python:
Een complete gids voor lineaire regressie in Python
Hoe polynomiale regressie uit te voeren in Python
Hoe logistieke regressie uit te voeren in Python