Как выполнить множественную линейную регрессию в 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

В этом примере мы построим модель множественной линейной регрессии, которая использует mpg в качестве переменной ответа и 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() для создания диаграммы рассеивания каждой возможной пары переменных:

pairs(data, pch = 18, col = "steelblue") 
График пар в R

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

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

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

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

#generate the pairs plot
ggpairs(data) 
График пар в R

Кажется, что каждая из переменных-предикторов имеет заметную линейную корреляцию с переменной отклика 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")
Гистограмма остатков в R

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

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

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

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

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

#add horizontal line at 0
abline(h = 0, lty = 2) 
График подогнанных значений и остатков в R

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

Интерпретация выходных данных модели

После того, как мы убедились, что допущения модели в достаточной степени выполняются, мы можем посмотреть на выходные данные модели, используя функцию 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.
#---
#Signif. 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. В частности, коэффициент из выходных данных модели говорит о том, что увеличение drat на одну единицу связано с увеличением в среднем на 2,715 единиц миль на галлон , при условии, что disp и hp остаются постоянными.

Оценка качества подгонки модели

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

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 * расход

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

  • дисп = 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

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