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


В этом руководстве показан пример выполнения множественной линейной регрессии в R, включая:

  • Изучите данные перед подгонкой модели
  • Настройка модели
  • Проверка предположений модели
  • Интерпретация результатов модели
  • Оценка соответствия модели
  • Используйте модель для прогнозирования

Пойдем!

Средство

В этом примере мы будем использовать встроенный набор данных R mtcars , который содержит информацию о различных атрибутах 32 разных автомобилей:

 #view first six lines of mtcars
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 и drat в качестве переменных-предикторов.

 #create new data frame that contains only the variables we would like to use to
data <- mtcars[, c("mpg", "disp", "hp", "drat")]

#view first six rows of new data frame
head(data)

# mpg disp hp drat
#Mazda RX4 21.0 160 110 3.90
#Mazda RX4 Wag 21.0 160 110 3.90
#Datsun 710 22.8 108 93 3.85
#Hornet 4 Drive 21.4 258 110 3.08
#Hornet Sportabout 18.7 360 175 3.15
#Valiant 18.1 225 105 2.76

Обзор данных

Прежде чем подобрать модель, мы можем просмотреть данные, чтобы лучше их понять, а также визуально оценить, может ли множественная линейная регрессия быть хорошей моделью, подходящей для этих данных.

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

Для этого мы можем использовать функцию пары() для создания диаграммы рассеяния каждой возможной пары переменных:

 pairs(data, pch = 18, col = "steelblue")

Из этого графика пар мы видим следующее:

  • миль на галлон и доступность, по-видимому, имеют сильную отрицательную линейную корреляцию.
  • миль на галлон и л.с., по-видимому, имеют сильную положительную линейную корреляцию.
  • миль на галлон и драта, по-видимому, имеют умеренную отрицательную линейную корреляцию.

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

 #install and load the GGally library
install.packages("GGally")
library(GGally)

#generate the pairs plot
ggpairs(data)

Каждая из переменных-предсказателей, по-видимому, имеет заметную линейную корреляцию с переменной ответа mpg , поэтому мы продолжим подгонку модели линейной регрессии к данным.

Настройка модели

Основной синтаксис для подбора модели множественной линейной регрессии в R:

 lm(response_variable ~ predictor_variable1 + predictor_variable2 + ..., data = data)

Используя наши данные, мы можем подогнать модель, используя следующий код:

 model <- lm(mpg ~ disp + hp + drat, data = data)

Проверка предположений модели

Прежде чем приступить к проверке результатов модели, мы должны сначала убедиться, что предположения модели выполняются. А именно, нам необходимо проверить следующее:

1. Распределение остатков модели должно быть примерно нормальным.

Мы можем проверить, выполняется ли это предположение, создав простую гистограмму остатков:

 hist(residuals(model), col = "steelblue")

Хотя распределение слегка смещено вправо , оно не настолько аномально, чтобы вызывать серьезное беспокойство.

2. Дисперсия остатков должна быть постоянной для всех наблюдений.

Это предпочтительное состояние известно как гомоскедастичность. Нарушение этого предположения известно как гетероскедастичность .

Чтобы проверить, выполняется ли это предположение, мы можем создать график скорректированной/остаточной стоимости:

 #create fitted value vs residual plot
plot(fitted(model), residuals(model))

#add horizontal line at 0
abline(h = 0, lty = 2)

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

Интерпретация результатов модели

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

 summary(model)

#Call:
#lm(formula = mpg ~ disp + hp + drat, data = data)
#
#Residuals:
# Min 1Q Median 3Q Max 
#-5.1225 -1.8454 -0.4456 1.1342 6.4958 
#
#Coefficients:
#Estimate Std. Error t value Pr(>|t|)   
#(Intercept) 19.344293 6.370882 3.036 0.00513 **
#disp -0.019232 0.009371 -2.052 0.04960 * 
#hp -0.031229 0.013345 -2.340 0.02663 * 
#drat 2.714975 1.487366 1.825 0.07863 . 
#---
#Significant. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#
#Residual standard error: 3.008 on 28 degrees of freedom
#Multiple R-squared: 0.775, Adjusted R-squared: 0.7509 
#F-statistic: 32.15 on 3 and 28 DF, p-value: 3.28e-09

По результату мы видим следующее:

  • Общая F-статистика модели равна 32,15 , а соответствующее значение p — 3,28e-09 . Это указывает на то, что общая модель статистически значима. Другими словами, регрессионная модель в целом полезна.
  • disp статистически значим на уровне значимости 0,10. В частности, коэффициент из результатов модели показывает, что увеличение доступности на одну единицу связано со снижением в среднем на -0,019 единицы миль на галлон , при условии, что мощность и расход топлива остаются постоянными. .
  • hp является статистически значимым на уровне значимости 0,10. В частности, коэффициент из результатов модели показывает, что увеличение мощности на одну единицу связано со снижением в среднем на -0,031 единицы миль на галлон , при условии, что disp и drat остаются постоянными.
  • drat статистически значим на уровне значимости 0,10. В частности, коэффициент из результатов модели показывает, что увеличение потребления бензина на одну единицу связано со средним увеличением на 2715 единиц миль на галлон , при условии, что расход и мощность остаются постоянными.

Оценка соответствия модели

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

1. Несколько R-квадратов

Это измеряет силу линейной связи между переменными-предикторами и переменной ответа. R-квадрат, кратный 1, указывает на идеальную линейную связь, тогда как R-квадрат, кратный 0, указывает на отсутствие линейной зависимости.

Множественный R также является квадратным корнем из R в квадрате, который представляет собой долю дисперсии переменной ответа, которую можно объяснить переменными-предикторами. В этом примере кратное R-квадрата равно 0,775 . Таким образом, R в квадрате равен 0,775 2 = 0,601 . Это указывает на то, что 60,1% дисперсии миль на галлон можно объяснить предикторами модели.

Связанный: Что такое хорошее значение R-квадрата?

2. Остаточная стандартная ошибка

Это измеряет среднее расстояние между наблюдаемыми значениями и линией регрессии. В данном примере наблюдаемые значения отклоняются в среднем на 3,008 единицы от линии регрессии .

Связанный:   Понимание стандартной ошибки регрессии

Используйте модель для прогнозирования

Из результатов модели мы знаем, что подобранное уравнение множественной линейной регрессии имеет вид:

шляпа миль на галлон = -19,343 – 0,019*дисп – 0,031*л.с. + 2,715*драт

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

  • дисплей = 220
  • ч = 150
  • драт = 3
 #define the coefficients from the model output
intercept <- coef(summary(model))["(Intercept)", "Estimate"]
disp <- coef(summary(model))["disp", "Estimate"]
hp <- coef(summary(model))["hp", "Estimate"]
drat <- coef(summary(model))["drat", "Estimate"]

#use the model coefficients to predict the value for mpg
intercept + disp*220 + hp*150 + drat*3

#[1] 18.57373

Для автомобиля с disp = 220, hp = 150 и drat = 3 модель прогнозирует расход топлива 18,57373 миль на галлон .

Полный код R, используемый в этом уроке, можно найти здесь .

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

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

Как выполнить квадратичную регрессию в R
Как выполнить полиномиальную регрессию в R
Как выполнить экспоненциальную регрессию в R

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *