Мы часто используем три разных значения суммы квадратов , чтобы измерить, насколько хорошо линия регрессии соответствует набору данных:
1. Общая сумма квадратов (SST) – сумма квадратов разностей между отдельными точками данных (y i ) и средним значением переменной ответа ( y ).
- SST = Σ(y i – y ) 2
2. Регрессия суммы квадратов (SSR) – сумма квадратов разностей между прогнозируемыми точками данных (ŷ i ) и средним значением переменной ответа ( y ).
- SSR = Σ(ŷ i – y ) 2
3. Ошибка суммы квадратов (SSE) – сумма квадратов разностей между предсказанными точками данных (ŷ i ) и наблюдаемыми точками данных (y i ).
- SSE = Σ(ŷ i – y i ) 2
В следующем пошаговом примере показано, как рассчитать каждую из этих метрик для заданной модели регрессии в Python.
Шаг 1: Создайте данные
Во-первых, давайте создадим набор данных, который содержит количество часов обучения и экзаменационные баллы, полученные для 20 разных студентов в определенном университете:
import pandas as pd
#create pandas DataFrame
df = pd.DataFrame({'hours': [1, 1, 1, 2, 2, 2, 2, 2, 3, 3,
3, 4, 4, 4, 5, 5, 6, 7, 7, 8],
'score': [68, 76, 74, 80, 76, 78, 81, 84, 86, 83,
88, 85, 89, 94, 93, 94, 96, 89, 92, 97]})
#view first five rows of DataFrame
df.head ()
hours score
0 1 68
1 1 76
2 1 74
3 2 80
4 2 76
Шаг 2: Подгонка регрессионной модели
Далее мы будем использовать функцию OLS() из библиотеки statsmodels , чтобы подобрать простую модель линейной регрессии, используя счет в качестве переменной ответа и часы в качестве переменной-предиктора:
import statsmodels.api as sm
#define response variable
y = df['score']
#define predictor variable
x = df[['hours']]
#add constant to predictor variables
x = sm.add_constant (x)
#fit linear regression model
model = sm. OLS (y, x). fit ()
Шаг 3: Рассчитайте SST, SSR и SSE
Наконец, мы можем использовать следующие формулы для расчета значений SST, SSR и SSE модели:
import numpy as np
#calculate sse
sse = np.sum ((model. fittedvalues - df.score ) \*\* 2)
print(sse)
331.07488479262696
#calculate ssr
ssr = np.sum ((model. fittedvalues - df.score.mean ()) \*\* 2)
print(ssr)
917.4751152073725
#calculate sst
sst = ssr + sse
print(sst)
1248.5499999999995
Получаются следующие показатели:
- Общая сумма квадратов (SST): 1248,55
- Сумма квадратов регрессии (SSR): 917,4751
- Ошибка суммы квадратов (SSE): 331,0749
Мы можем убедиться, что SST = SSR + SSE:
- SST = SSR + SSE
- 1248,55 = 917,4751 + 331,0749
Дополнительные ресурсы
Вы можете использовать следующие калькуляторы для автоматического расчета SST, SSR и SSE для любой простой линии линейной регрессии:
В следующих руководствах объясняется, как рассчитать SST, SSR и SSE в других статистических программах: