如何在Python中计算 Studentized Residuals
Studentized 残差是一个统计学术语,它被定义为用残差除以其估计的标准差而得到的商。这是一种用于检测轮廓的重要技术。实际上,人们可以声称,数据集中的任何类型的观察,如果其研究性残差超过3(绝对值),就是一个离群点。
以下Python库应该已经安装在我们的系统中。
你可以通过在终端使用以下命令在你的系统上安装这些软件包。
pip3 install pandas numpy statsmodels matplotlib
在Python中计算 studentized残差的步骤
第1步:导入库。
我们需要在上面安装的程序中导入这些库。
# Importing necessary packages
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
第2步:创建一个数据框架。
首先,我们需要创建一个数据框。在pandas包的帮助下,我们可以创建一个数据框。下面是一个片段。
# Creating dataframe
dataframe = pd.DataFrame({'Score': [80, 95, 80, 78, 84,
96, 86, 75, 97, 89],
'Benchmark': [27, 28, 18, 18, 29, 30,
25, 25, 24, 29]})
第3步:建立一个简单的线性回归模型。
现在我们需要对创建的数据集建立一个简单的线性回归模型。为了拟合一个简单的线性回归模型,Python提供了statsmodels软件包中的ls()函数。
语法:
statsmodels.api.OLS(y, x)
参数:
- y : 它表示取决于x的变量
- x :它代表自变量
示例:
# Building simple linear regression model
simple_regression_model = ols('Score ~ Benchmark', data=dataframe).fit()
步骤4:产生研究性的剩余物。
为了产生一个包含数据集中每个观测值的 studentized 残差的 dataFrame,我们可以使用 outlier_test() 函数。
语法:
simple_regression_model.outlier_test()
这个函数将产生一个dataFrame,包含数据集中每个观测点的 studentized残差。
# Producing studenterized residual
stud_res = simple_regression_model.outlier_test()
以下是完整的实现
# Python program to calculate studenterized residual
# Importing necessary packages
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
# Creating dataframe
dataframe = pd.DataFrame({'Score': [80, 95, 80, 78, 84,
96, 86, 75, 97, 89],
'Benchmark': [27, 28, 18, 18, 29, 30,
25, 25, 24, 29]})
# Building simple linear regression model
simple_regression_model = ols('Score ~ Benchmark', data=dataframe).fit()
# Producing studenterized residual
result = simple_regression_model.outlier_test()
print(result)
输出:
输出是一个数据框,其中包含。
- 螺线管残差
- 未经调整的研究性残差的P值
- 经过邦费罗尼校正的研究性残差的P值
我们可以看到,数据集中第一个观测点的studentized残差为-1.121201,第二个观测点的studentized残差为0.954871,以此类推。
可视化:
现在,让我们来看看 studentized残差的可视化情况。在matplotlib的帮助下,我们可以绘制预测变量值与相应的studentized残差图。
示例:
# Python program to draw the plot
# of stundenterized resiual
# Importing necessary packages
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
import matplotlib.pyplot as plt
# Creating dataframe
dataframe = pd.DataFrame({'Score': [80, 95, 80, 78, 84,
96, 86, 75, 97, 89],
'Benchmark': [27, 28, 18, 18, 29, 30,
25, 25, 24, 29]})
# Building simple linear regression model
simple_regression_model = ols('Score ~ Benchmark', data=dataframe).fit()
# Producing studenterized residual
result = simple_regression_model.outlier_test()
# Defining predictor variable values and
# studentized residuals
x = dataframe['Score']
y = result['student_resid']
# Creating a scatterplot of predictor variable
# vs studentized residuals
plt.scatter(x, y)
plt.axhline(y=0, color='black', linestyle='--')
plt.xlabel('Points')
plt.ylabel('Studentized Residuals')
# Save the plot
plt.savefig("Plot.png")
输出:
Plot.png: