С реализациями на R и Python

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

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

Основы линейной регрессии - пример

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

Данные

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

Вы можете импортировать данные из S3 с помощью R или Python с помощью следующих фрагментов кода.

Импорт файла CSV из S3 с помощью Python:

Импорт CSV-файла из S3 с помощью R:

Модель линейной регрессии

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

В этом уравнении мы имеем:

  • Beta 0, коэффициент пересечения, дает значение SellPrice для гипотетического случая, когда все независимые переменные равны 0.
  • Бета-коэффициенты с 1 по 4, коэффициенты наклона, дают увеличение SellPrice при увеличении конкретной переменной на один шаг.
  • Эпсилон: вариация в SellPrice, которая не объясняется моделью (это может быть случайная вариация или вариация, вызванная некоторыми независимыми переменными)

Подбор модели линейной регрессии

Последний шаг перед тем, как перейти к предположениям, - это подгонка модели. Для кода R мы будем использовать функцию lm, которая является функцией перехода для линейных моделей. В реализации Python мы будем использовать библиотеку statsmodels.

Допущения линейной регрессии

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

Предположение линейной регрессии 1 - Независимость наблюдений

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

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

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

Предположение 2 линейной регрессии - нет скрытых или отсутствующих переменных

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

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

Предположение линейной регрессии 3 - линейная связь

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

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

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

Проверка линейных отношений с помощью Python

Проверка линейных отношений с R

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

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

На графиках нет идеальных прямых линий, но это не проблема. Также нет четкого нелинейного паттерна, и линейная модель может хорошо с этим работать.

Предположение линейной регрессии 4 - нормальность остатков

Четвертое предположение линейной регрессии состоит в том, что остатки должны следовать нормальному распределению. Как только вы получите остатки от своей модели, это относительно легко проверить, используя гистограмму или график QQ. Графики QQ немного сложнее читать, но они более точны для интерпретации, поэтому давайте посмотрим, как построить графики QQ остатков с помощью R и Python.

Проверка нормальности остатков с помощью Python:

Проверка нормальности остатков с помощью R:

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

Если вы видите любой тип S-образной формы, экспоненциальной кривой или другой формы, кроме прямой линии, это означает, что у вас есть проблема: ваша модель, вероятно, указана неправильно. Возможно, вам не хватает каких-то переменных, или, может быть, ваши отношения на самом деле не линейны! Вы можете попробовать нелинейные модели или другие спецификации линейной модели (с использованием разных переменных или различной подготовки переменных).

В текущем примере явно видна перевернутая S-форма, означающая, что с моделью, вероятно, что-то не так.

Предположение 5 линейной регрессии - мультиколлинеарность отсутствует или небольшая

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

Итак, почему мы хотим иметь сильную корреляцию между каждой независимой переменной и зависимой переменной, но не корреляцию между независимыми переменными? Причина в том, что если две независимые переменные коррелируют, они объясняют одну и ту же информацию. Модель не сможет узнать, какая из двух переменных фактически отвечает за изменение зависимой переменной.

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

Проверка мультиколлинеарности с помощью R:

Проверка мультиколлинеарности с помощью Python:

VIF начинается с 1 и не имеет верхнего предела. VIF, равный 1, - лучшее, что вы можете иметь, поскольку это указывает на отсутствие мультиколлинеарности для этой переменной. Значение VIF выше 5 или 10 указывает на наличие проблемы с независимыми переменными в вашей модели.

В текущей модели определенно есть проблема с переменными BathRooms, BedRooms и SquareMeterHouse. Они кажутся очень коррелированными между собой, и было бы необходимо проверить, какие из этих переменных действительно необходимы для объяснения SellPrice.

Предположение 6 линейной регрессии - гомоскедастичность

Шестое предположение линейной регрессии - гомоскедастичность. Гомоскедастичность в модели означает, что ошибка постоянна для значений зависимой переменной. Лучший способ проверить гомоскедастичность - это построить диаграмму рассеяния с остатками от зависимой переменной. Вы можете сделать это с помощью следующего кода R и Python.

Проверка гомоскедастичности с помощью R:

Проверка гомоскедастичности с помощью Python:

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

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

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

Предположение линейной регрессии 7 - Все независимые переменные не коррелированы с ошибкой

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

Вы можете получить диаграммы разброса, используя следующий код R и Python:

Проверка корреляции между IV и остатками в Python:

Проверка корреляции между IV и остатками в R:

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

Предположение 8 линейной регрессии - наблюдения за ошибкой не коррелируют друг с другом

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

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

Проверка остаточной автокорреляции в Python:

Проверка остаточной автокорреляции в R:

Если возникает закономерность, вполне вероятно, что у вас неверно указанная модель. Возможно, вы забыли важную объясняющую переменную. Или вам может быть лучше использовать другое семейство моделей. Если у вас есть автокорреляция, вы можете изучить модели временных рядов, такие как Auto-Regression Moving Average или ARMA.

Что делать, если ваши предположения линейной регрессии нарушаются?

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

  • Работа с входными данными путем преобразования или добавления недостающих переменных может решить многие проблемы.
  • Нелинейная регрессия - отличный способ пойти, когда вы обнаружите, что у вас неточная спецификация
  • Если вы наблюдаете мультиколлинеарность, вы, вероятно, захотите использовать в своей модели меньше переменных. У вас есть тесно связанные независимые переменные, и было бы лучше выбрать одну из них. Альтернативой может быть создание из них составной переменной, например, с помощью анализа главных компонентов.
  • Если вы наблюдаете гомоскедастичность, вы можете перейти к модели взвешенных наименьших квадратов, которая является альтернативой OLS, которая может иметь дело с
  • Если ваши независимые переменные коррелируют с ошибкой, вы, скорее всего, в случае неверно указанной модели, и вам следует поработать над выбором правильных переменных для включения в ваше исследование.
  • Если термины ошибок связаны друг с другом, возможно, вы попали в ситуацию, когда присутствует автокорреляция, и вы можете хорошо использовать модели временных рядов.

Надеюсь, эта статья была вам полезна. Благодарим за прочтение! Следите за новостями!