La differenza tra glm e lm in r


Il linguaggio di programmazione R fornisce le seguenti funzioni per l’adattamento di modelli lineari:

1. lm – Utilizzato per adattarsi ai modelli lineari

Questa funzione utilizza la seguente sintassi:

lm(formula, dati, …)

Oro:

  • formula: la formula del modello lineare (ad esempio y ~ x1 + x2)
  • dati: il nome del blocco dati che contiene i dati

2. glm – Utilizzato per adattare modelli lineari generalizzati

Questa funzione utilizza la seguente sintassi:

glm(formula, famiglia=gaussiana, dati, …)

Oro:

  • formula: la formula del modello lineare (ad esempio y ~ x1 + x2)
  • famiglia: la famiglia statistica da utilizzare per adattare il modello. L’impostazione predefinita è gaussiana, ma altre opzioni includono Binomiale, Gamma e Poisson, tra le altre.
  • dati: il nome del blocco dati che contiene i dati

Tieni presente che l’unica differenza tra queste due funzioni è l’argomento family incluso nella funzione glm() .

Se usi lm() o glm() per adattare un modello di regressione lineare, produrranno esattamente gli stessi risultati .

Tuttavia, la funzione glm() può essere utilizzata anche per adattare modelli più complessi come:

Gli esempi seguenti mostrano come utilizzare nella pratica le funzioni lm() e glm().

Esempio di utilizzo della funzione lm()

Il codice seguente mostra come adattare un modello di regressione lineare utilizzando la funzione lm():

 #fit multiple linear regression model
model <- lm(mpg ~ disp + hp, data=mtcars)

#view model summary
summary(model)

Call:
lm(formula = mpg ~ disp + hp, data = mtcars)

Residuals:
    Min 1Q Median 3Q Max 
-4.7945 -2.3036 -0.8246 1.8582 6.9363 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 30.735904 1.331566 23.083 < 2nd-16 ***
available -0.030346 0.007405 -4.098 0.000306 ***
hp -0.024840 0.013385 -1.856 0.073679 .  
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 3.127 on 29 degrees of freedom
Multiple R-squared: 0.7482, Adjusted R-squared: 0.7309 
F-statistic: 43.09 on 2 and 29 DF, p-value: 2.062e-09

Esempi di utilizzo della funzione glm()

Il codice seguente mostra come adattare esattamente lo stesso modello di regressione lineare utilizzando la funzione glm():

 #fit multiple linear regression model
model <- glm(mpg ~ disp + hp, data=mtcars)

#view model summary
summary(model)

Call:
glm(formula = mpg ~ disp + hp, data = mtcars)

Deviance Residuals: 
    Min 1Q Median 3Q Max  
-4.7945 -2.3036 -0.8246 1.8582 6.9363  

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 30.735904 1.331566 23.083 < 2nd-16 ***
available -0.030346 0.007405 -4.098 0.000306 ***
hp -0.024840 0.013385 -1.856 0.073679 .  
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for gaussian family taken to be 9.775636)

    Null deviance: 1126.05 on 31 degrees of freedom
Residual deviance: 283.49 on 29 degrees of freedom
AIC: 168.62

Number of Fisher Scoring iterations: 2

Si noti che le stime dei coefficienti e gli errori standard delle stime dei coefficienti sono esattamente gli stessi prodotti dalla funzione lm().

Tieni presente che possiamo anche utilizzare la funzione glm() per adattare un modello di regressione logistica specificando family=binomial come segue:

 #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 anche utilizzare la funzione glm() per adattare un modello di regressione di Poisson specificando family=poisson come segue:

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

#view model summary
summary(model)

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

Deviance Residuals: 
    Min 1Q Median 3Q Max  
-1.1266 -0.4629 -0.2453 0.1797 1.5428  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)   
(Intercept) 0.214255 0.593463 0.361 0.71808   
available -0.018915 0.007072 -2.674 0.00749 **
hp 0.016522 0.007163 2.307 0.02107 * 
---
Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for fish family taken to be 1)

    Null deviance: 23,420 on 31 degrees of freedom
Residual deviance: 10,526 on 29 degrees of freedom
AIC: 42,526

Number of Fisher Scoring iterations: 6

Risorse addizionali

Come eseguire una regressione lineare semplice in R
Come eseguire la regressione lineare multipla in R
Come utilizzare la funzione di previsione con glm in R

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *