如何在Python中计算学生化残差?
学生化残差通常用于回归分析中,以识别数据中的潜在异常值。异常值是与数据的整体趋势显著不同的点,它可以对拟合模型产生重大影响。通过识别和分析异常值,你可以更好地理解数据的基本模式,并提高模型的准确性。在本文中,我们将仔细研究学生化残差以及如何在python中实现它。
什么是学生化残差?
"学生化残差"这个术语指的是一个特定类别的残差,它们的标准差已被估计除以一个估计值。回归分析残差用于描述响应变量的观察值和其模型生成的预期值之间的差异。为了找出可能影响拟合模型的数据中的潜在异常值,采用学生化残差。
下列公式通常用于计算学生化残差−
学生化残差 = 残差 / (残差的标准差 * (1 - hii)^(1/2))
其中,"残差"指观察值和预期响应值之间的差异,"残差的标准差"是残差标准差的估计值,"hii"是每个数据点的杠杆比例。
在Python中计算学生化残差
可以使用statsmodels包在Python中计算学生化残差。例如,考虑以下情况−
语法
OLSResults.outlier_test()
其中,OLSResults是使用statsmodels的ols()方法拟合的线性模型。
df = pd.DataFrame({'rating': [95, 82, 92, 90, 97, 85, 80, 70, 82, 83],
'points': [22, 25, 17, 19, 26, 24, 9, 19, 11, 16]})
model = ols('rating ~ points', data=df).fit()
stud_res = model.outlier_test()
其中,’rating’和’points’是指简单线性回归。
算法
-
导入numpy、pandas和Statsmodel api。
-
创建数据集。
-
在数据集上执行简单线性回归模型。
-
计算学生化残差。
-
打印学生化残差。
示例
下面演示使用scikit−posthocs库运行Dunn’s Test的方法−
#导入必要的包和函数
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
#创建数据集
df = pd.DataFrame({'rating': [95, 82, 92, 90, 97, 85, 80, 70, 82, 83],
'points': [22, 25, 17, 19, 26, 24, 9, 19, 11, 16]})
#使用statsmodels OLS类创建线性回归模型
model = ols('rating ~ points', data=df).fit()
#使用异常值测试方法计算每个观察值的学生化残差,并存入数据框中
stud_res = model.outlier_test()
#显示学生化残差
print(stud_res)
输出结果
student_resid unadj_p bonf(p)
0 1.048218 0.329376 1.000000
1 -1.018535 0.342328 1.000000
2 0.994962 0.352896 1.000000
3 0.548454 0.600426 1.000000
4 1.125756 0.297380 1.000000
5 -0.465472 0.655728 1.000000
6 -0.029670 0.977158 1.000000
7 -2.940743 0.021690 0.216903
8 0.100759 0.922567 1.000000
9 -0.134123 0.897080 1.000000
我们还可以快速绘制预测变量值与学生化残差的图形 –
语法
x = df['points']
y = stud_res['student_resid']
plt.scatter(x, y)
plt.axhline(y=0, color='black', linestyle='--')
plt.xlabel('Points')
plt.ylabel('Studentized Residuals')
这里我们将使用matpotlib库绘制图形,颜色为’black’,线型为’–‘
算法
-
导入matplotlib的pyplot库
-
定义预测变量值
-
定义学生化残差
-
创建预测变量与学生化残差的散点图
示例
import matplotlib.pyplot as plt
#定义预测变量值和标准化残差
x = df['points']
y = stud_res['student_resid']
#创建预测变量与标准化残差的散点图
plt.scatter(x, y)
plt.axhline(y=0, color='black', linestyle='--')
plt.xlabel('得分')
plt.ylabel('标准化残差')
输出
结论
识别和评估可能存在的数据异常值。通过检查标准化残差,可以找到偏离数据总趋势较大的点,并探究它们对拟合模型的影响。识别重要的观测点。可以使用标准化残差发现和评估具有显著影响的数据,即对拟合模型产生重要影响的点。发现高杠杆点。标准化残差可用于识别高杠杆点。杠杆是用来衡量某个点对拟合模型的影响有多大的指标。总之,使用标准化残差可以帮助分析和提高回归模型的性能。