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

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

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

Нелинейность

Если мы хотим, чтобы наша модель линейной регрессии не вызывала подозрений, между предиктором (предикторами) и переменной отклика должна быть прямолинейная связь. Если такой связи нет, наши предсказания становятся подозрительными. Чтобы выявить нелинейность, мы можем проверить остаточные графики. Остаточные графики - это график, на котором есть подогнанные значения (прогнозируемые значения) по оси x и остатки по оси y.

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

Предположим, что мы наблюдали нелинейность в нашей модели. Что нам делать? Конечно, мы можем использовать нелинейные преобразования предиктора(ов) X(s). Например, X², X³, sqrt(X) или log X могут решить проблему нелинейности.

В качестве примера нелинейности и всех других проблем я буду использовать набор данных Carseats из пакета ISLR. Я построил следующую модель со следующими функциями:

df <- Carseats
model <- lm(Sales~Advertising+Price+Age+CompPrice+Income+Population,data=df)

Теперь мы проверяем остаточный график со следующими кодами:

plot(model$fitted.values, model$residuals, xlab = "Fitted Values", ylab = "Residuals")

Кроме того, можно нарисовать график остатков следующим образом:

par(mfrow = c(2,2))
plot(model)

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

Корреляция остатков

Другое предположение модели линейной регрессии состоит в том, что остатки не должны быть коррелированы. Если существует корреляция между остатками, истинные стандартные ошибки будут занижены оцененными стандартными ошибками. В результате этого интервалы (прогноз и достоверность) будут уже, чем должны быть. Кроме того, p-значение модели будет ниже, чем должно быть. Это изменит все в нашей модели.

Непостоянная дисперсия условий ошибки

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

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

Еще одним способом выявления гетероскедастичности является бреш-языческий тестидир. Гипотеза теста такова:

Ho : Ошибки имеют постоянную дисперсию.

Ha : Ошибки не имеют постоянной дисперсии.

Согласно результату теста, мы хотим, чтобы p-значение было меньше уровня значимости.

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

В R тест Бреуша — Пагана можно найти в пакете lmtest. В следующем коде показано, как это реализовано.

bptest(Sales~Advertising+Price+Age+CompPrice+Income+Population,data=df)
 studentized Breusch-Pagan test

data:  Sales ~ Advertising + Price + Age + CompPrice + Income + Population
BP = 0.88444, df = 6, p-value = 0.9896

Выбросы

Выброс в модели линейной регрессии — это наблюдение, которое далеко от предсказанного значения модели. Это не оказывает большого влияния на построенную линию, однако может вызвать другие проблемы, такие как снижение R² или увеличение RMSE.

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

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

Следующий код показывает, как выбросы идентифицируются в R.

# calculating standardized residuals
standardized.residuals<-
  model$residuals/sqrt(var(model$residuals))

# drawing standardized residual plot
plot(model$fitted.values,standardized.residuals, xlab = "Predictions", ylab = "Standardized Residuals")
abline(h=0)
abline(h=-3)
abline(h=3)

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

рычаги

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

С самого начала этого раздела я говорю о высоком кредитном плече. Тем не менее, что это такое? Чтобы количественно оценить кредитное плечо наблюдения, рассчитывается статистика кредитного плеча. Большое его значение означает, что существует высокое кредитное плечо.

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

st.res <- model$residuals/sd(model$residuals)
plot(hatvalues(model),st.res)
abline(h=c(-2,2),v=2*mean(hatvalues(model)))

В этом примере нет высокого кредитного плеча. Однако если он и был, то на затененных участках.

Коллинеарность

Коллинеарность относится к тесной связи между одной или несколькими переменными-предикторами. Это еще один проблемный вопрос. Поскольку, если существует тесная связь между двумя переменными-предикторами, было бы трудно разделить индивидуальное влияние предиктора на переменную отклика. Также можно констатировать, что это приводит к увеличению стандартной ошибки предиктора. Это вызывает снижение t-статистики, которая относится к значимости предикторной переменной.

Существует два способа обнаружения коллинеарности. Первый способ — проверить матрицу корреляции переменных-предикторов. Если есть пара сильно коррелированных переменных, то мы можем констатировать наличие проблемы коллинеарности в модели. Однако это не всегда так просто. Поскольку в некоторых случаях может возникнуть проблема коллинеарности между тремя или более переменными. Эта ситуация называется мультиколлинеарностью. В этом случае корреляционной матрицы будет недостаточно для его обнаружения. В случае мультиколлинеарности мы можем проверить коэффициент инфляции дисперсии (VIF). Это отношение дисперсии бета при подборе полной модели, деленное на дисперсию бета при подборе отдельно. Наименьшее значение VIF равно 1. Однако, чтобы избежать проблемы мультиколлинеарности; нам нужно значение VIF, превышающее 5 или 10.

Есть также два способа решения проблемы коллинеарности. Первый — удалить одну из проблемных переменных из регрессионной модели. Второй способ — объединить проблемные переменные вместе в одну переменную. Однако это может быть не для всех типов наборов данных.

В R пакет car имеет функцию vif для проверки коллинеарности в модели. Все, что вам нужно сделать, это написать имя объекта, который вы создали для модели линейной регрессии.

# loading library
library(car)
# checking the variance inflation factor
vif(model)
Advertising       Price         Age   CompPrice      Income  Population 
   1.084517    1.534319    1.015966    1.549623    1.011341    1.090368

Как видно из вывода, поскольку нет переменных со значением VIF больше 10, в этой модели нет проблемы коллинеарности.

Как всегда:

«На случай, если я вас не увижу, добрый день, добрый вечер и спокойной ночи!»

Справочник и дополнительная литература

Гарет, Джеймс и др. _Введение в статистическое обучение: с приложениями в R. Spinger, 2013. p(92–103)