Hoe de voorspellingsfunctie met glm in r te gebruiken (met voorbeelden)


De glm() -functie in R kan worden gebruikt om gegeneraliseerde lineaire modellen aan te passen. Deze functie is met name handig voor het aanpassen van logistische regressiemodellen , Poisson-regressiemodellen en andere complexe modellen.

Zodra we een model hebben aangepast, kunnen we de functie voorspellen() gebruiken om de responswaarde van een nieuwe waarneming te voorspellen.

Deze functie gebruikt de volgende syntaxis:

voorspellen(object, nieuwedata, type = “antwoord”)

Goud:

  • object: De naam van de modelaanpassing met behulp van de glm() functie
  • newdata: de naam van het nieuwe dataframe waarvoor voorspellingen moeten worden gedaan
  • type: Het type voorspelling dat moet worden gedaan.

Het volgende voorbeeld laat zien hoe je een gegeneraliseerd lineair model in R kunt passen en hoe je het model vervolgens kunt gebruiken om de responswaarde te voorspellen van een nieuwe waarneming die het nog nooit eerder heeft gezien.

Voorbeeld: gebruik van de voorspellingsfunctie met glm in R

Voor dit voorbeeld gebruiken we de ingebouwde R-dataset genaamd mtcars :

 #view first six rows of mtcars data frame
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

We passen het volgende logistische regressiemodel toe waarin we de variabelen disp en hp gebruiken om de responsvariabele am te voorspellen (het transmissietype van de auto: 0 = automatisch, 1 = handgeschakeld).

 #fit logistic regression model
model <- glm(am ~ disp + hp, data=mtcars, family=binomial)

#view model summary
summary(model)

Call:
glm(formula = am ~ disp + hp, family = binomial, data = mtcars)

Deviance Residuals: 
    Min 1Q Median 3Q Max  
-1.9665 -0.3090 -0.0017 0.3934 1.3682  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept) 1.40342 1.36757 1.026 0.3048  
available -0.09518 0.04800 -1.983 0.0474 *
hp 0.12170 0.06777 1.796 0.0725 .
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 43,230 on 31 degrees of freedom
Residual deviance: 16,713 on 29 degrees of freedom
AIC: 22,713

Number of Fisher Scoring iterations: 8

We kunnen dit model vervolgens gebruiken om de waarschijnlijkheid te voorspellen dat een nieuwe auto een automatische transmissie (am=0) of een handgeschakelde transmissie (am=1) zal hebben met behulp van de volgende code:

 #define new observation
newdata = data. frame (disp=200, hp=100)

#use model to predict value of am
predict(model, newdata, type=" response ")

         1 
0.00422564

Het model voorspelt dat de kans dat de nieuwe auto een handgeschakelde versnellingsbak heeft (am=1) 0,004 is. Dit betekent dat het zeer waarschijnlijk is dat deze nieuwe auto wordt geleverd met een automatische transmissie.

Houd er rekening mee dat we ook meerdere voorspellingen tegelijk kunnen doen als we een database hebben met meerdere nieuwe auto’s.

De volgende code laat bijvoorbeeld zien hoe u het ingebouwde model kunt gebruiken om de waarschijnlijkheid van een handgeschakelde versnellingsbak voor drie nieuwe auto’s te voorspellen:

 #define new data frame of three cars
newdata = data. frame (disp=c(200, 180, 160),
                     hp=c(100, 90, 108))

#view data frame
newdata

  hp disp
1,200 100
2 180 90
3,160,108

#use model to predict value of am for all three cars
predict(model, newdata, type=" response ")

          1 2 3 
0.004225640 0.008361069 0.335916069 

Zo interpreteert u het resultaat:

  • De kans dat auto 1 een handgeschakelde versnellingsbak heeft is 0,004 .
  • De kans dat auto 2 een handgeschakelde versnellingsbak heeft is 0,008 .
  • De kans dat auto 3 een handgeschakelde versnellingsbak heeft is 0,336 .

Opmerkingen

De kolomnamen in het nieuwe dataframe moeten exact overeenkomen met de kolomnamen in het dataframe die zijn gebruikt om het model te maken.

Merk op dat in ons vorige voorbeeld het dataframe dat we gebruikten om het model te maken de volgende kolomnamen bevatte voor onze voorspellende variabelen:

  • weergave
  • PK

Dus toen we het nieuwe dataframe met de naam newdata creëerden, zorgden we ervoor dat we de kolommen ook een naam gaven:

  • weergave
  • PK

Als de kolomnamen niet overeenkomen, ontvangt u het volgende foutbericht:

Fout bij evaluatie (predvars, data, env)

Houd hier rekening mee wanneer u de functie voorspellen() gebruikt.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in R kunt uitvoeren:

Hoe eenvoudige lineaire regressie uit te voeren in R
Hoe meervoudige lineaire regressie uit te voeren in R
Hoe polynomiale regressie uit te voeren in R
Een voorspellingsinterval maken in R

Einen Kommentar hinzufügen

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