我们经常使用三种不同的平方和值来衡量回归线对数据集的适合程度。
1.平方总和(SST)-- 各个数据点(yi)与响应变量(y)的平均值之间的平方差之和:
- SST = Σ(yi -y)2
2.平方和回归(SSR)--预测数据点(ŷi)与响应变量(y)的平均值之间的平方差之和:
- SSR = Σ(ŷi -y)2
3.平方误差总和(SSE)--预测数据点(ŷi)与观察数据点(yi)之间的平方差之和:
- SSE = Σ(ŷi - yi)2
下面的例子说明了如何在Python中为一个给定的回归模型计算这些指标中的每一项。
第一步:创建数据
首先,让我们创建一个数据集,其中包含某大学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
第二步:拟合一个回归模型
接下来,我们将使用statsmodels库中的OLS()函数,以分数为响应变量,以学时为预测变量,拟合一个简单的线性回归模型:
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()
第三步:计算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: