8. Проверка предположений о модели
Восьмым инструментом является проверка предположений о модели (Assumption Checks). В линейной регрессии существуют несколько предположений о данных, которые должны выполняться для правильного применения модели. Эти предположения включают в себя:
Линейность: Отношение между зависимой переменной и независимыми переменными должно быть линейным.
Независимость ошибок: Ошибки модели должны быть независимыми друг от друга.
Нормальность ошибок: Ошибки модели должны иметь нормальное распределение.
Гомоскедастичность: Ошибки модели должны иметь постоянную дисперсию.
Проверка этих предположений позволяет оценить, насколько хорошо модель соответствует данным и насколько правильно можно интерпретировать ее результаты.
В качестве примера вызова проверки предположений о модели в линейной регрессии на 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))))
Разберем этот код:
Мы создаем массивы
X
иy
с данными.Добавляем константу к массиву
X
с помощьюsm.add_constant(X)
, чтобы учесть смещение в модели.Подгоняем модель линейной регрессии с помощью
sm.OLS(y, X).fit()
.Проверка линейности: Строим график остатков по отношению к предсказанным значениям и независимой переменной с помощью
sm.graphics.plot_regress_exog(model, fig=plt.figure())
.Проверка нормальности остатков: Строим qq-график для остатков с помощью
sm.qqplot(model.resid, line='s', fit=True)
и отображаем его с помощьюplt.show()
.Проверка гомоскедастичности: Строим график остатков по отношению к предсказанным значениям с помощью
plt.scatter(model.fittedvalues, model.resid)
и отображаем его с помощьюplt.show()
.Проверка мультиколлинеарности: Вычисляем максимальный абсолютный коэффициент корреляции между независимыми переменными с помощью
np.max(np.abs(np.corrcoef(X.T)))
.
Анализируя графики и значения, полученные в результате выполнения этого кода, вы можете сделать вывод о том, выполняются ли предположения модели линейной регрессии для данных X
и y
.
И еще один пример:
Предположения, которые необходимо проверить, включают:
Линейность
Нормальность остатков
Гомоскедастичность (постоянная дисперсия остатков)
Отсутствие мультиколлинеарности
Вот пример кода, демонстрирующий эти проверки:
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