Come utilizzare la funzione di previsione con glm in r (con esempi)
La funzione glm() in R può essere utilizzata per adattare modelli lineari generalizzati. Questa funzionalità è particolarmente utile per l’adattamento di modelli di regressione logistica , modelli di regressione di Poisson e altri modelli complessi.
Una volta adattato un modello, possiamo utilizzare la funzione predit() per prevedere il valore di risposta di una nuova osservazione.
Questa funzione utilizza la seguente sintassi:
predire (oggetto, nuovi dati, tipo = “risposta”)
Oro:
- oggetto: il nome della regolazione del modello utilizzando la funzione glm()
- newdata: il nome del nuovo frame di dati per cui fare previsioni
- type: il tipo di previsione da effettuare.
L’esempio seguente mostra come adattare un modello lineare generalizzato in R e come quindi utilizzare il modello per prevedere il valore di risposta di una nuova osservazione mai vista prima.
Esempio: utilizzo della funzione di previsione con glm in R
Per questo esempio, utilizzeremo il set di dati R integrato chiamato 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
Adatteremo il seguente modello di regressione logistica in cui utilizziamo le variabili disp e hp per prevedere la variabile di risposta am (il tipo di trasmissione dell’auto: 0 = automatico, 1 = manuale).
#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
Possiamo quindi utilizzare questo modello per prevedere la probabilità che una nuova auto avrà un cambio automatico (am=0) o un cambio manuale (am=1) utilizzando il seguente codice:
#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
Il modello prevede che la probabilità che la nuova auto abbia un cambio manuale (am=1) è 0,004 . Ciò significa che è molto probabile che questa nuova vettura sarà dotata di cambio automatico.
Tieni presente che possiamo anche fare più previsioni contemporaneamente se disponiamo di un database contenente più auto nuove.
Ad esempio, il codice seguente mostra come utilizzare il modello montato per prevedere la probabilità di una trasmissione manuale per tre nuove auto:
#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
Ecco come interpretare il risultato:
- La probabilità che l’auto 1 abbia un cambio manuale è 0,004 .
- La probabilità che l’auto 2 abbia un cambio manuale è 0,008 .
- La probabilità che l’auto 3 abbia un cambio manuale è 0,336 .
Commenti
I nomi delle colonne nel nuovo frame di dati devono corrispondere esattamente ai nomi delle colonne nel frame di dati utilizzati per creare il modello.
Tieni presente che nel nostro esempio precedente, il frame di dati utilizzato per creare il modello conteneva i seguenti nomi di colonna per le nostre variabili predittive:
- Schermo
- HP
Pertanto, quando abbiamo creato il nuovo frame di dati chiamato newdata, ci siamo assicurati di nominare anche le colonne:
- Schermo
- HP
Se i nomi delle colonne non corrispondono, riceverai il seguente messaggio di errore:
Errore in eval (predvars, data, env)
Tienilo a mente quando usi la funzione predit() .
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in R:
Come eseguire una regressione lineare semplice in R
Come eseguire la regressione lineare multipla in R
Come eseguire la regressione polinomiale in R
Come creare un intervallo di previsione in R