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


Функцию glm() в R можно использовать для подбора обобщенных линейных моделей. Эта функция особенно полезна для подбора моделей логистической регрессии, моделей регрессии Пуассона и других сложных моделей.

После того, как мы подогнали модель, мы можем использовать функцию предсказания () , чтобы предсказать значение отклика нового наблюдения.

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

предсказать (объект, новые данные, тип = «ответ»)

куда:

  • объект: имя модели подходит с помощью функции glm()
  • newdata: имя нового фрейма данных, для которого будут делаться прогнозы.
  • type: Тип прогноза, который нужно сделать.

В следующем примере показано, как подобрать обобщенную линейную модель в R и как затем использовать модель для прогнозирования значения отклика нового наблюдения, которого она раньше не видела.

Пример: использование функции прогнозирования с glm в R

В этом примере мы будем использовать встроенный набор данных R под названием 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

Мы применим следующую модель логистической регрессии, в которой мы используем переменные disp и hp для прогнозирования переменной отклика am (тип трансмиссии автомобиля: 0 = автоматическая, 1 = ручная).

#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

Затем мы можем использовать эту модель для прогнозирования вероятности того, что новый автомобиль будет иметь автоматическую коробку передач (am=0) или механическую коробку передач (am=1), используя следующий код:

#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

Модель предсказывает, что вероятность того, что новый автомобиль будет иметь механическую коробку передач (am=1), будет равна 0,004.Это означает, что очень похоже на то, что этот новый автомобиль имеет автоматическую коробку передач.

Обратите внимание, что мы также можем сделать несколько прогнозов одновременно, если у нас есть фрейм данных с несколькими новыми автомобилями.

Например, следующий код показывает, как использовать подобранную модель для прогнозирования вероятности наличия механической коробки передач для трех новых автомобилей:

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

#view data frame
newdata

 disp hp
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

Вот как интерпретировать вывод:

  • Вероятность того, что автомобиль 1 имеет механическую коробку передач, равна 0,004 .
  • Вероятность того, что у автомобиля 2 механическая коробка передач, равна 0,008 .
  • Вероятность того, что у автомобиля 3 механическая коробка передач, равна 0,336 .

Заметки

Имена столбцов в новом фрейме данных должны точно совпадать с именами столбцов в фрейме данных, которые использовались для построения модели.

Обратите внимание, что в нашем предыдущем примере фрейм данных, который мы использовали для построения модели, содержал следующие имена столбцов для наших переменных-предикторов:

  • дисп
  • л.с.

Таким образом, когда мы создали новый фрейм данных с именем newdata , мы также позаботились о том, чтобы назвать столбцы:

  • дисп
  • л.с.

Если имена столбцов не совпадают, вы получите следующее сообщение об ошибке:

Ошибка в eval(predvars, data, env)

Имейте это в виду при использовании функции предсказания().

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

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