Как использовать функцию прогнозирования с 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

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.