Фактор инфляции дисперсии (VIF) — это числовой показатель, который измеряет, насколько дисперсия (вариация) оценки коэффициента регрессии увеличивается из-за мультиколлинеарности между предикторами.

Математическое определение

Для предиктора VIF вычисляется по формуле:

где:

  • — коэффициент детерминации регрессионной модели, в которой предиктор является зависимой переменной, а все остальные предикторы — независимыми переменными

Как вычисляется VIF?

Шаг 1: Вспомогательная регрессия

Для каждого предиктора строится регрессионная модель:

Шаг 2: Расчет

Из этой регрессии извлекается коэффициент детерминации , который показывает, какая доля дисперсии объясняется другими предикторами.

Шаг 3: Расчет VIF

Интерпретация значений VIF

Значение VIFСтепень мультиколлинеарностиИнтерпретация
VIF = 1ОтсутствуетНет корреляции с другими предикторами
1 < VIF < 5УмереннаяПриемлемый уровень
5 ≤ VIF < 10ВысокаяТребует внимания
VIF ≥ 10КритическаяСерьезная проблема

Почему VIF работает?

Из формулы дисперсии коэффициента регрессии в методе наименьших квадратов:

где:

  • — дисперсия ошибок
  • — общая сумма квадратов для
  • — фактор инфляции дисперсии

VIF показывает, во сколько раз увеличивается дисперсия коэффициента из-за мультиколлинеарности.

Практический пример

Предположим, у нас есть модель с тремя предикторами: , ,

Вычисление VIF для :

  1. Строим регрессию:
  2. Получаем
  3. Вычисляем:

Интерпретация:

Дисперсия коэффициента в 5 раз больше, чем была бы при отсутствии мультиколлинеарности.

Особые случаи

Совершенная мультиколлинеарность:

Если , то:

Полная независимость:

Если , то:

Средний VIF

Для общей оценки мультиколлинеарности в модели можно использовать средний VIF:

где — количество предикторов.

Практическое применение

В Python (statsmodels):

from statsmodels.stats.outliers_influence import variance_inflation_factor
from statsmodels.tools.tools import add_constant
 
# Добавляем константу
X_with_const = add_constant(X)
 
# Вычисляем VIF для каждого предиктора
vif_data = pd.DataFrame()
vif_data["Variable"] = X_with_const.columns
vif_data["VIF"] = [variance_inflation_factor(X_with_const.values, i) 
                   for i in range(X_with_const.shape[1])]

В R:

library(car)
vif(model)  # Вычисляет VIF для всех предикторов в модели

Ограничения VIF

  1. Не обнаруживает все формы мультиколлинеарности — только линейные зависимости
  2. Не указывает, какие переменные коррелированы — только факт наличия проблемы
  3. Чувствителен к спецификации модели — добавление/удаление переменных меняет VIF

Рекомендации по использованию

  1. Пороговое значение 10 — общепринятый критерий для серьезной мультиколлинеарности
  2. Сравнительный анализ — смотреть на относительные значения VIF разных предикторов
  3. Содержательный смысл — иногда высокая корреляция между предикторами оправдана содержательно
  4. Для прогнозирования — если цель прогноз, а не интерпретация коэффициентов, можно допустить более высокие значения VIF

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