Разница между glm и lm в R


Язык программирования R предлагает следующие функции для подбора линейных моделей:

1. lm — используется для линейных моделей.

Эта функция использует следующий синтаксис:

lm(формула, данные, …)

куда:

  • формула: формула для линейной модели (например, y ~ x1 + x2)
  • data: имя фрейма данных, содержащего данные

2. glm — используется для подбора обобщенных линейных моделей.

Эта функция использует следующий синтаксис:

glm(формула, семейство=гаусс, данные, …)

куда:

  • формула: формула для линейной модели (например, y ~ x1 + x2)
  • семья: Статистическая семья, используемая для соответствия модели. По умолчанию используется гауссовская диаграмма, но другие параметры включают, среди прочего, биномиальную, гамму и пуассоновскую диаграмму.
  • data: имя фрейма данных, содержащего данные

Обратите внимание, что единственная разница между этими двумя функциями заключается в аргументе семейства , включенном в функцию glm() .

Если вы используете lm() или glm() для подбора модели линейной регрессии, они дадут точно такие же результаты .

Однако функцию glm() также можно использовать для соответствия более сложным моделям, таким как:

В следующих примерах показано, как использовать функции lm() и glm() на практике.

Пример использования функции lm()

В следующем коде показано, как подобрать модель линейной регрессии с помощью функции 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 < 2e-16 \*\*\*
disp -0.030346 0.007405 -4.098 0.000306 \*\*\*
hp -0.024840 0.013385 -1.856 0.073679.
---
Signif. 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

Примеры использования функции glm()

В следующем коде показано, как подобрать точно такую же модель линейной регрессии с помощью функции 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 < 2e-16 \*\*\*
disp -0.030346 0.007405 -4.098 0.000306 \*\*\*
hp -0.024840 0.013385 -1.856 0.073679.
---
Signif. 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

Обратите внимание, что оценки коэффициентов и стандартные ошибки оценок коэффициентов точно такие же, как и при использовании функции lm().

Обратите внимание, что мы также можем использовать функцию glm() для подбора модели логистической регрессии , указав family=binomial следующим образом:

#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 
disp -0.09518 0.04800 -1.983 0.0474 \*
hp 0.12170 0.06777 1.796 0.0725 .
---
Signif. 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

Мы также можем использовать функцию glm() для подбора модели регрессии Пуассона , указав family=poisson следующим образом:

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

#view model summary
summary(model)

Call:
glm(formula = am ~ disp + hp, family = poisson, 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 
disp -0.018915 0.007072 -2.674 0.00749 \*\*
hp 0.016522 0.007163 2.307 0.02107 \* 
---
Signif. codes: 0 ‘\*\*\*’ 0.001 ‘\*\*’ 0.01 ‘\*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson 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

Дополнительные ресурсы

Как выполнить простую линейную регрессию в R
Как выполнить множественную линейную регрессию в R
Как использовать функцию прогнозирования с glm в R