Een complete gids voor lineaire regressie in python


Lineaire regressie is een methode die we kunnen gebruiken om de relatie tussen een of meer voorspellende variabelen en een responsvariabele te begrijpen.

In deze tutorial wordt uitgelegd hoe u lineaire regressie uitvoert in Python.

Voorbeeld: lineaire regressie in Python

Stel dat we willen weten of het aantal studie-uren en het aantal afgelegde oefenexamens invloed hebben op het cijfer dat een student op een bepaald examen krijgt.

Om deze relatie te onderzoeken, kunnen we de volgende stappen in Python uitvoeren om meervoudige lineaire regressie uit te voeren.

Stap 1: Voer de gegevens in.

Eerst maken we een panda’s DataFrame om onze dataset in op te slaan:

 import pandas as pd

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

#view data 
df

        hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96
13 5 4 90
14 3 4 82
15 4 4 85
16 6 5 99
17 2 1 83
18 1 0 62
19 2 1 76

Stap 2: Voer lineaire regressie uit.

Vervolgens zullen we de functie OLS() uit de statsmodels-bibliotheek gebruiken om een gewone regressie met de kleinste kwadraten uit te voeren, waarbij we ‚uren‘ en ‚examens‘ gebruiken als voorspellende variabelen en ’score‘ als de responsvariabele:

 import statsmodels.api as sm

#define response variable
y = df['score']

#define predictor variables
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                            
==================================================== ============================
Dept. Variable: R-squared score: 0.734
Model: OLS Adj. R-squared: 0.703
Method: Least Squares F-statistic: 23.46
Date: Fri, 24 Jul 2020 Prob (F-statistic): 1.29e-05
Time: 13:20:31 Log-Likelihood: -60.354
No. Observations: 20 AIC: 126.7
Df Residuals: 17 BIC: 129.7
Df Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 67.6735 2.816 24.033 0.000 61.733 73.614
hours 5.5557 0.899 6.179 0.000 3.659 7.453
exams -0.6017 0.914 -0.658 0.519 -2.531 1.327
==================================================== ============================
Omnibus: 0.341 Durbin-Watson: 1.506
Prob(Omnibus): 0.843 Jarque-Bera (JB): 0.196
Skew: -0.216 Prob(JB): 0.907
Kurtosis: 2,782 Cond. No. 10.8
==================================================== ============================

Stap 3: Interpreteer de resultaten.

Zo interpreteert u de meest relevante cijfers in het resultaat:

R kwadraat: 0,734 . Dit wordt de determinatiecoëfficiënt genoemd. Dit is het deel van de variantie in de responsvariabele dat kan worden verklaard door de voorspellende variabelen. In dit voorbeeld wordt 73,4% van de variatie in examenscores verklaard door het aantal gestudeerde uren en het aantal afgelegde voorbereidende examens.

F-statistiek: 23,46 . Dit is de algemene F-statistiek van het regressiemodel.

Waarschijnlijk (F-statistiek): 1.29e-05. Dit is de p-waarde die is gekoppeld aan de algehele F-statistiek. Dit vertelt ons of het regressiemodel als geheel statistisch significant is of niet. Met andere woorden, het vertelt ons of de twee voorspellende variabelen samen een statistisch significant verband hebben met de responsvariabele. In dit geval is de p-waarde kleiner dan 0,05, wat aangeeft dat de voorspellende variabelen ‘studie-uren’ en ‘afgelegde voorbereidende examens’ samen een statistisch significant verband hebben met de examenscore.

coef: De coëfficiënten van elke voorspellende variabele vertellen ons de verwachte gemiddelde verandering in de responsvariabele, ervan uitgaande dat de andere voorspellende variabele constant blijft. Voor elk extra uur dat aan studeren wordt besteed, zou de gemiddelde examenscore naar verwachting bijvoorbeeld met 5,56 stijgen, ervan uitgaande dat de afgelegde oefenexamens constant blijven.

Je kunt het op een andere manier bekijken: als student A en student B allebei hetzelfde aantal voorbereidende examens afleggen, maar student A een uur langer studeert, dan zou student A 5,56 punten hoger moeten scoren dan die van student B.

De interceptcoëfficiënt interpreteren we zo dat de verwachte examenscore voor een student die geen uren studeert en geen voorbereidende examens aflegt 67,67 bedraagt.

P>|t|. Individuele p-waarden vertellen ons of elke voorspellende variabele statistisch significant is of niet. We kunnen zien dat ‘uren’ statistisch significant zijn (p = 0,00), terwijl ‘examens’   (p = 0,52) is niet statistisch significant bij α = 0,05. Omdat de term ‘examens’ niet statistisch significant is, kunnen we uiteindelijk besluiten deze uit het model te verwijderen.

Geschatte regressievergelijking: We kunnen de coëfficiënten uit de modeluitvoer gebruiken om de volgende geschatte regressievergelijking te maken:

examenscore = 67,67 + 5,56*(uren) – 0,60*(voorbereidende examens)

Met deze geschatte regressievergelijking kunnen we de verwachte examenscore voor een student berekenen, op basis van het aantal uren studie en het aantal oefenexamens dat hij/zij aflegt. Een student die bijvoorbeeld drie uur studeert en een voorbereidend examen aflegt, zou een cijfer van 83,75 moeten krijgen:

Houd er rekening mee dat, aangezien de eerdere voorbereidende examens niet statistisch significant waren (p = 0,52), we kunnen besluiten deze te verwijderen, omdat ze geen enkele verbetering opleveren voor het algehele model. In dit geval zouden we een eenvoudige lineaire regressie kunnen uitvoeren met alleen de bestudeerde uren als voorspellende variabele.

Stap 4: Verifieer modelaannames.

Nadat u een lineaire regressie hebt uitgevoerd, wilt u wellicht verschillende aannames controleren om er zeker van te zijn dat de resultaten van het regressiemodel betrouwbaar zijn. Deze veronderstellingen omvatten:

Veronderstelling #1: Er is een lineair verband tussen de voorspellende variabelen en de responsvariabele.

  • Controleer deze aanname door een residuele plot te genereren die de aangepaste waarden weergeeft tegen de residuen voor een regressiemodel.

Hypothese #2: Onafhankelijkheid van residuen.

Hypothese #3: Homoscedasticiteit van residuen.

Veronderstelling nr. 4: Normaliteit van residuen.

Veronderstelling #5: Controleer of er geen multicollineariteit bestaat tussen de voorspellende variabelen.

  • Verifieer deze hypothese door de VIF-waarde van elke voorspellende variabele te berekenen.

Als aan deze aannames wordt voldaan, kunt u erop vertrouwen dat de resultaten van uw meervoudige lineaire regressiemodel betrouwbaar zijn.

Je kunt de volledige Python-code die in deze tutorial wordt gebruikt hier vinden.

Einen Kommentar hinzufügen

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