рекомендации

четверг, 14 октября 2021 г.

Анализ остатков линейной регрессии в R

Линейная регрессия - это статистический метод моделирования линейной связи между зависимой переменной y (то есть той, которую мы хотим предсказать) и одной или несколькими независимыми переменными (X).

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

Мы сделали ряд предположений относительно данных, и они должны быть выполнены для успешной работы линейной модели, а стандартные графики остатков могут помочь проверить некоторые из них. Вот они:
  • Набор данных должен иметь линейную взаимосвязь.
  • Многомерная нормальность - переменные набора данных должны быть статистически нормально распределены.
  • У него не должно быть мультиколлинеарности или она должна быть незначительной - это означает, что независимые переменные не должны быть слишком сильно коррелированы друг с другом. Это можно проверить с помощью корреляционной матрицы и других тестов.
  • Нет автокорреляции - автокорреляция возникает, когда остатки не независимы друг от друга. Например, это обычно происходит с ценами на акции, где цена не зависит от предыдущей цены.
  • Гомоскедастичность - это означает, что остатки равномерно распределены по линии регрессии, то есть выше и ниже линии регрессии, а дисперсия остатков должна быть одинаковой для всех прогнозируемых оценок вдоль линии регрессии.
Доступ к четырем стандартным графикам можно получить с помощью функции plot() с переменной fit после создания модели. Их можно использовать, чтобы показать, есть ли проблемы с набором данных и созданной моделью, которые необходимо учитывать при проверке достоверности модели. Вот они:
  • Residuals vs Fitted Plot
  • Normal Q–Q (quantile-quantile) Plot
  • Scale-Location
  • Residuals vs Leverage
В качестве примера для отображения графиков остатков используется набор данных mtcars. Набор данных описывает характеристики различных автомобилей и то, как они связаны с зависимой переменной mpg, то есть как такие вещи, как вес, количество цилиндров и количество передач, влияют на расход топлива в милях на галлон. В этом примере мы будем использовать mpg (mpg) vs weight (wt).

library(ggplot2)
data("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

Подгонка линии регрессии и ее остатков

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

График показывает размер значений остатков с использованием цветового кода (от красного - длинная линия до зеленого - меньшая линия) и размера точки. Размер остатка - это длина вертикальной линии от точки до того места, где она встречается с линией регрессии.

d <- mtcars
fit <- lm(mpg ~ wt, data = d) # fit the model
d$predicted <- predict(fit)   # Save the predicted values
d$residuals <- residuals(fit) # Save the residual values
ggplot(d, aes(x = wt, y = mpg)) +
  geom_smooth(method = "lm", se = FALSE, color = "lightgrey") +     # regression line  
  geom_segment(aes(xend = wt, yend = predicted), alpha = .2) +      # draw line from point to line
  geom_point(aes(color = abs(residuals), size = abs(residuals))) +  # size of the points
  scale_color_continuous(low = "green", high = "red") +             # colour of the points mapped to residual size - green smaller, red larger
  guides(color = FALSE, size = FALSE) +                             # Size legend removed
  geom_point(aes(y = predicted), shape = 1) +
  theme_bw()


summary(fit) 
## 
## Call:
## lm(formula = mpg ~ wt, data = d)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -4.5432 -2.3647 -0.1252  1.4096  6.8727 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  37.2851     1.8776  19.858  < 2e-16 ***
## wt           -5.3445     0.5591  -9.559 1.29e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.046 on 30 degrees of freedom
## Multiple R-squared:  0.7528, Adjusted R-squared:  0.7446 
## F-statistic: 91.38 on 1 and 30 DF,  p-value: 1.294e-10

Глядя на summary, она имеет p-value 1,294e-10, что указывает на наличие статистически значимой связи между двумя переменными. Итак, почему нам нужно смотреть на другие вещи, такие как остатки?

P-values сами по себе потенциально могут ввести в заблуждение без анализа остатков.

1. Residuals vs Fitted Plot

Как объясняет Брайан Каффо в своей книге «Regression Models for Data Science in R» (https://leanpub.com/regmods/read#leanpub-auto-residuals), остатки представляют собой вариации, не объясненные моделью.

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

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

В приведенном ниже примере из книги Каффо показана линия регрессии, проходящая через несколько точек.

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


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

Это хороший признак того, что эта зависимость линейная.

plot(fit, which=1, col=c("blue")) # Residuals vs Fitted Plot


2. Нормальный график Q – Q (квантиль-квантиль)

Остатки должны быть нормально распределены, и график Q-Q покажет это. Если остатки на этом графике проходят близко к прямой линии, это хороший признак того, что они нормально распределены.

Пример из Университета Вирджинии (http://data.library.virginia.edu/diagnostic-plots/) показывает хороший и плохой случай. Случай 1 показывает хорошее выравнивание, но Случай 2 значительно отклоняется от линии, что указывает на проблему.



Для нашей модели график Q-Q показывает довольно хорошее выравнивание по линии с небольшим смещением нескольких точек вверху.

plot(fit, which=2, col=c("red"))  # Q-Q Plot



3. Scale-Location

Этот график проверяет предположение линейной регрессии о равной дисперсии (гомоскедастичности), то есть о том, что остатки имеют одинаковую дисперсию вдоль линии регрессии. Его также называют графиком Spread-Location.

Так что он значит? Вот пример того, как это должно выглядеть. Остатки имеют одинаковую дисперсию (занимают одинаковое пространство) выше и ниже линии и по длине линии. Это пример из https://stats.stackexchange.com/questions/52089/what-does-having-constant-variance-in-a-linear-regression-model-mean/52107#52107



Опять же, пример из Университета Вирджинии показывает два графика «Scale-Location». Случай 1 более хаотично распределен сверху, снизу и вдоль линии. Случай 2 уже внизу и намного шире вверху, показывая, что остатки не имеют постоянной дисперсии, а линия явно не горизонтальна.


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

plot(fit, which=3, col=c("blue"))  # Scale-Location Plot



4. Residuals vs Leverage

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

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

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



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

plot(fit, which=5, col=c("blue"))  # Residuals vs Leverage



Заключение

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

Ссылки:

1. Caffo, Brian; Regression Models for Data Science in R

2. posted by Penguin_Knight 

3. University of Virginia Library (http://data.library.virginia.edu/diagnostic-plots/)

Комментариев нет:

Отправить комментарий