8. Проверка предположений о модели

Восьмым инструментом является проверка предположений о модели (Assumption Checks). В линейной регрессии существуют несколько предположений о данных, которые должны выполняться для правильного применения модели. Эти предположения включают в себя:

  1. Линейность: Отношение между зависимой переменной и независимыми переменными должно быть линейным.

  2. Независимость ошибок: Ошибки модели должны быть независимыми друг от друга.

  3. Нормальность ошибок: Ошибки модели должны иметь нормальное распределение.

  4. Гомоскедастичность: Ошибки модели должны иметь постоянную дисперсию.

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

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

import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

# Данные
X = np.array([3, -0.5, 2, 7])
y = np.array([2.5, 0.0, 2, 8])

# Подгонка модели линейной регрессии
X = sm.add_constant(X)  # Добавляем константу для вычисления смещения
model = sm.OLS(y, X).fit()

# Проверка линейности
fig = sm.graphics.plot_regress_exog(model, exog_idx=1, fig=plt.figure())

# Проверка нормальности остатков
sm.qqplot(model.resid, line='s', fit=True)
plt.show()

# Проверка гомоскедастичности
plt.scatter(model.fittedvalues, model.resid)
plt.xlabel("Fitted Values")
plt.ylabel("Residuals")
plt.show()

# Проверка мультиколлинеарности
print(np.max(np.abs(np.corrcoef(X.T))))

Разберем этот код:

  1. Мы создаем массивы X и y с данными.

  2. Добавляем константу к массиву X с помощью sm.add_constant(X), чтобы учесть смещение в модели.

  3. Подгоняем модель линейной регрессии с помощью sm.OLS(y, X).fit().

  4. Проверка линейности: Строим график остатков по отношению к предсказанным значениям и независимой переменной с помощью sm.graphics.plot_regress_exog(model, fig=plt.figure()).

  5. Проверка нормальности остатков: Строим qq-график для остатков с помощью sm.qqplot(model.resid, line='s', fit=True) и отображаем его с помощью plt.show().

  6. Проверка гомоскедастичности: Строим график остатков по отношению к предсказанным значениям с помощью plt.scatter(model.fittedvalues, model.resid) и отображаем его с помощью plt.show().

  7. Проверка мультиколлинеарности: Вычисляем максимальный абсолютный коэффициент корреляции между независимыми переменными с помощью np.max(np.abs(np.corrcoef(X.T))).

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

И еще один пример:

Предположения, которые необходимо проверить, включают:

  1. Линейность

  2. Нормальность остатков

  3. Гомоскедастичность (постоянная дисперсия остатков)

  4. Отсутствие мультиколлинеарности

Вот пример кода, демонстрирующий эти проверки:

import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt

# Создаем некоторые тестовые данные
np.random.seed(12345)
n = 100
x = np.linspace(0, 10, n)
X = np.column_stack((x, x**2))
beta = [0.5, 0.1]
e = np.random.normal(size=n)
y = np.dot(X, beta) + e

# Создаем DataFrame для входных данных
data = pd.DataFrame({"x": x, "x_squared": x**2, "y": y})

# Подгоняем модель линейной регрессии
X = data[["x", "x_squared"]]
y = data["y"]
model = sm.OLS(y, X).fit()

# Проверка линейности
fig = sm.graphics.plot_regress_exog(model, "x", fig=plt.figure())

# Проверка нормальности остатков
sm.qqplot(model.resid, line='s', fit=True)
plt.show()

# Проверка гомоскедастичности
plt.scatter(model.fittedvalues, model.resid)
plt.xlabel("Fitted Values")
plt.ylabel("Residuals")
plt.show()

# Проверка мультиколлинеарности
print(np.max(np.abs(np.corrcoef(X.T))))

Last updated