Hoe predict() te gebruiken met een logistisch regressiemodel in r


Zodra we een logistisch regressiemodel in R hebben geïnstalleerd, kunnen we de functie voorspellen() gebruiken om de responswaarde van een nieuwe waarneming te voorspellen die het model nog nooit eerder heeft gezien.

Deze functie gebruikt de volgende syntaxis:

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

Goud:

  • object: de naam van het logistische regressiemodel
  • 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 u deze functie in de praktijk kunt gebruiken.

Voorbeeld: Predict() gebruiken met een logistiek regressiemodel in R

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

 #view first six rows of mtcars dataset
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 zullen het volgende logistische regressiemodel passen 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 dan een nieuw dataframe maken met informatie over acht auto’s die het model nog nooit eerder heeft gezien en de functie voorspellen() gebruiken om de waarschijnlijkheid te voorspellen dat een nieuwe auto een automatische transmissie (am=0) of een handgeschakelde transmissie zal hebben ( ben =1):

 #define new data frame
newdata = data. frame (disp=c(200, 180, 160, 140, 120, 120, 100, 160),
                     hp=c(100, 90, 108, 90, 80, 90, 80, 90),
                     am=c(0, 0, 0, 1, 0, 1, 1, 1))

#view data frame
newdata

#use model to predict value of am for all new cars
newdata$am_prob <- predict(model, newdata, type=" response ")

#view updated data frame
newdata

  disp hp am am_prob
1 200 100 0 0.004225640
2 180 90 0 0.008361069
3 160 108 0 0.335916069
4 140 90 1 0.275162866
5 120 80 0 0.429961894
6 120 90 1 0.718090728
7 100 80 1 0.835013994
8 160 90 1 0.053546152

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 .

Enzovoort.

We kunnen ook de functie table() gebruiken om een verwarringsmatrix te maken die de werkelijke am-waarden weergeeft versus de waarden die door het model worden voorspeld:

 #create vector that contains 0 or 1 depending on predicted value of am
am_pred = rep(0, dim(newdata)[1])
am_pred[newdata$am_prob > .5] = 1

#create confusion matrix
table(am_pred, newdata$am)

am_pred 0 1
      0 4 2
      1 0 2

Ten slotte kunnen we de functie Mean() gebruiken om het percentage waarnemingen in de nieuwe database te berekenen waarvoor het model de waarde van am correct voorspelde:

 #calculate percentage of observations the model correctly predicted response value for
mean(am_pred == newdata$am)

[1] 0.75

We kunnen zien dat het model de am- waarde correct voorspelde voor 75% van de auto’s in de nieuwe database.

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