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

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert