Hoe meervoudige lineaire regressie uit te voeren in r
Deze handleiding toont een voorbeeld van het uitvoeren van meervoudige lineaire regressie in R, waaronder:
- Bestudeer de gegevens voordat u het model aanpast
- Modelaanpassing
- Het controleren van modelaannames
- Modeluitvoer interpreteren
- Het beoordelen van de goede pasvorm van het model
- Gebruik het model om voorspellingen te doen
Laten we gaan!
Faciliteit
Voor dit voorbeeld gebruiken we de ingebouwde R-dataset mtcars , die informatie bevat over verschillende attributen van 32 verschillende auto’s:
#view first six lines of mtcars
head(mtcars)
# mpg cyl disp hp drat wt qsec vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 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.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
In dit voorbeeld zullen we een meervoudig lineair regressiemodel bouwen dat mpg als responsvariabele en disp , hp en drat als voorspellende variabelen gebruikt.
#create new data frame that contains only the variables we would like to use to data <- mtcars[, c("mpg", "disp", "hp", "drat")] #view first six rows of new data frame head(data) # mpg disp hp drat #Mazda RX4 21.0 160 110 3.90 #Mazda RX4 Wag 21.0 160 110 3.90 #Datsun 710 22.8 108 93 3.85 #Hornet 4 Drive 21.4 258 110 3.08 #Hornet Sportabout 18.7 360 175 3.15 #Valiant 18.1 225 105 2.76
Gegevensoverzicht
Voordat we het model passen, kunnen we naar de gegevens kijken om deze beter te begrijpen en ook visueel evalueren of meervoudige lineaire regressie al dan niet een goed model zou kunnen zijn om deze gegevens te passen.
In het bijzonder moeten we controleren of de voorspellende variabelen een lineair verband hebben met de responsvariabele, wat erop zou kunnen wijzen dat een meervoudig lineair regressiemodel geschikt kan zijn.
Om dit te doen, kunnen we de functie pairs() gebruiken om een spreidingsdiagram te maken van elk mogelijk paar variabelen:
pairs(data, pch = 18, col = "steelblue")
Uit deze parengrafiek kunnen we het volgende zien:
- mpg en beschikbaarheid lijken een sterke negatieve lineaire correlatie te hebben
- mpg en hp lijken een sterke positieve lineaire correlatie te hebben
- mpg en drat lijken een bescheiden negatieve lineaire correlatie te hebben
Merk op dat we ook de functie ggpairs() uit de GGally- bibliotheek kunnen gebruiken om een soortgelijk diagram te maken met de feitelijke lineaire correlatiecoëfficiënten voor elk paar variabelen:
#install and load the GGally library install.packages("GGally") library(GGally) #generate the pairs plot ggpairs(data)
Elk van de voorspellende variabelen lijkt een opmerkelijke lineaire correlatie te hebben met de responsvariabele mpg , dus we zullen doorgaan met het aanpassen van het lineaire regressiemodel aan de gegevens.
Modelaanpassing
De basissyntaxis voor het aanpassen van een meervoudig lineair regressiemodel in R is:
lm(response_variable ~ predictor_variable1 + predictor_variable2 + ..., data = data)
Met behulp van onze gegevens kunnen we het model fitten met behulp van de volgende code:
model <- lm(mpg ~ disp + hp + drat, data = data)
Het controleren van modelaannames
Voordat we verder gaan met het verifiëren van de modelresultaten, moeten we eerst verifiëren of aan de modelaannames is voldaan. We moeten namelijk het volgende controleren:
1. De verdeling van modelresiduen moet ongeveer normaal zijn.
We kunnen controleren of aan deze veronderstelling wordt voldaan door een eenvoudig histogram van residuen te maken:
hist(residuals(model), col = "steelblue")
Hoewel de verdeling enigszinsrechtsscheef is, is deze niet abnormaal genoeg om grote zorgen te veroorzaken.
2. De variantie van de residuen moet consistent zijn voor alle waarnemingen.
Deze voorkeursconditie staat bekend als homoscedasticiteit. Schending van deze veronderstelling staat bekend als heteroscedasticiteit .
Om te controleren of aan deze veronderstelling wordt voldaan, kunnen we een gecorrigeerde/restwaardegrafiek maken:
#create fitted value vs residual plot plot(fitted(model), residuals(model)) #add horizontal line at 0 abline(h = 0, lty = 2)
Idealiter zouden we willen dat de residuen bij elke gepaste waarde gelijkelijk verspreid zijn. We kunnen uit de grafiek zien dat de spreiding iets groter wordt bij grotere aangepaste waarden, maar deze trend is niet extreem genoeg om al te veel zorgen te baren.
Modeluitvoer interpreteren
Zodra we hebben geverifieerd dat er voldoende aan de modelaannames is voldaan, kunnen we de modeluitvoer onderzoeken met behulp van de summary() functie:
summary(model) #Call: #lm(formula = mpg ~ disp + hp + drat, data = data) # #Residuals: # Min 1Q Median 3Q Max #-5.1225 -1.8454 -0.4456 1.1342 6.4958 # #Coefficients: #Estimate Std. Error t value Pr(>|t|) #(Intercept) 19.344293 6.370882 3.036 0.00513 ** #disp -0.019232 0.009371 -2.052 0.04960 * #hp -0.031229 0.013345 -2.340 0.02663 * #drat 2.714975 1.487366 1.825 0.07863 . #--- #Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 # #Residual standard error: 3.008 on 28 degrees of freedom #Multiple R-squared: 0.775, Adjusted R-squared: 0.7509 #F-statistic: 32.15 on 3 and 28 DF, p-value: 3.28e-09
Uit het resultaat kunnen we het volgende zien:
- De totale F-statistiek van het model is 32,15 en de overeenkomstige p-waarde is 3,28e-09 . Dit geeft aan dat het algehele model statistisch significant is. Met andere woorden: het regressiemodel als geheel is nuttig.
- disp is statistisch significant op het significantieniveau van 0,10. In het bijzonder geeft de coëfficiënt uit de modelresultaten aan dat een toename van de beschikbaarheid met één eenheid gepaard gaat met een gemiddelde afname van -0,019 eenheden in mpg , ervan uitgaande dat het aantal pk’s en het brandstofverbruik constant blijven. .
- hp is statistisch significant op het significantieniveau van 0,10. In het bijzonder geeft de coëfficiënt uit de modelresultaten aan dat een toename van één eenheid in paardenkracht gepaard gaat met een afname van gemiddeld -0,031 eenheden in mpg , ervan uitgaande dat disp en drat constant blijven.
- drat is statistisch significant op het significantieniveau van 0,10. In het bijzonder geeft de coëfficiënt uit de modelresultaten aan dat een toename van het benzineverbruik met één eenheid gepaard gaat met een gemiddelde toename van 2.715 mpg- eenheden, ervan uitgaande dat het debiet en het aantal pk’s constant blijven.
Het beoordelen van de goede pasvorm van het model
Om te beoordelen hoe goed het regressiemodel bij de gegevens past, kunnen we naar een aantal verschillende statistieken kijken:
1. Meerdere R-vierkanten
Dit meet de sterkte van de lineaire relatie tussen de voorspellende variabelen en de responsvariabele. Een R-kwadraat veelvoud van 1 geeft een perfect lineair verband aan, terwijl een R-kwadraat veelvoud van 0 geen lineair verband aangeeft.
Meerdere R is ook de vierkantswortel van R kwadraat, wat het deel van de variantie in de responsvariabele is dat kan worden verklaard door de voorspellende variabelen. In dit voorbeeld is het R-kwadraat veelvoud 0,775 . Dus de R kwadraat is 0,775 2 = 0,601 . Dit geeft aan dat 60,1% van de variantie in mpg kan worden verklaard door de modelvoorspellers.
Gerelateerd: Wat is een goede R-kwadraatwaarde?
2. Resterende standaardfout
Deze meet de gemiddelde afstand tussen de waargenomen waarden en de regressielijn. In dit voorbeeld wijken de waargenomen waarden gemiddeld 3,008 eenheden af van de regressielijn .
Verwant: De standaardfout van regressie begrijpen
Gebruik het model om voorspellingen te doen
Uit de modelresultaten weten we dat de gepaste meervoudige lineaire regressievergelijking is:
hat mpg = -19,343 – 0,019*disp – 0,031*pk + 2,715*drat
We kunnen deze vergelijking gebruiken om voorspellingen te doen over wat de mpg zal zijn voor nieuwe waarnemingen . We kunnen bijvoorbeeld de voorspelde mpg- waarde vinden voor een auto met de volgende kenmerken:
- weergave = 220
- l = 150
- drat = 3
#define the coefficients from the model output intercept <- coef(summary(model))["(Intercept)", "Estimate"] disp <- coef(summary(model))["disp", "Estimate"] hp <- coef(summary(model))["hp", "Estimate"] drat <- coef(summary(model))["drat", "Estimate"] #use the model coefficients to predict the value for mpg intercept + disp*220 + hp*150 + drat*3 #[1] 18.57373
Voor een auto met disp = 220, pk = 150 en drat = 3 voorspelt het model dat de auto 18,57373 mpg zou halen.
De volledige R-code die in deze tutorial wordt gebruikt, vindt u hier .
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere typen regressiemodellen in R kunt passen:
Hoe kwadratische regressie uit te voeren in R
Hoe polynomiale regressie uit te voeren in R
Hoe exponentiële regressie uit te voeren in R