2024-10-08 19:22:22 发布
网友
我试着寻找这个问题的答案,但到目前为止我还没有找到任何答案。我使用statsmodel在均值插补数据集上实现了一个普通的最小二乘回归模型。我可以访问OLS结果中的残差列表,但不能访问学生残差。如何计算/获取学生化残差?我知道计算学生化残差的公式,但我不确定如何用Python编写这个公式
提前谢谢
更新:我找到了答案。我可以从OLS reults的outlier_test()函数中获得一个包含学生化残差的数据帧
Nodar的实现不正确这里是https://newonlinecourses.science.psu.edu/stat501/node/339/中更正的公式以及删除的studentized剩余值,以防人们不想使用statsmodels包。两个公式返回的结果与上面链接中的示例相同
def internally_studentized_residual(X,Y): X = np.array(X, dtype=float) Y = np.array(Y, dtype=float) mean_X = np.mean(X) mean_Y = np.mean(Y) n = len(X) diff_mean_sqr = np.dot((X - mean_X), (X - mean_X)) beta1 = np.dot((X - mean_X), (Y - mean_Y)) / diff_mean_sqr beta0 = mean_Y - beta1 * mean_X y_hat = beta0 + beta1 * X residuals = Y - y_hat h_ii = (X - mean_X) ** 2 / diff_mean_sqr + (1 / n) Var_e = math.sqrt(sum((Y - y_hat) ** 2)/(n-2)) SE_regression = Var_e*((1-h_ii) ** 0.5) studentized_residuals = residuals/SE_regression return studentized_residuals def deleted_studentized_residual(X,Y): #formula from https://newonlinecourses.science.psu.edu/stat501/node/401/ r = internally_studentized_residual(X,Y) n = len(r) return [r_i*math.sqrt((n-2-1)/(n-2-r_i**2)) for r_i in r]
使用OLSRresults.outlier_test()函数生成一个数据集,该数据集包含每个观察的studentized残差
例如:
#import necessary packages and functions import numpy as np import pandas as pd import statsmodels.api as sm from statsmodels.formula.api import ols #create dataset df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86], 'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19]}) #fit simple linear regression model model = ols('rating ~ points', data=df).fit() #calculate studentized residuals stud_res = model.outlier_test() #display studentized residuals print(stud_res) student_resid unadj_p bonf(p) 0 -0.486471 0.641494 1.000000 1 -0.491937 0.637814 1.000000 2 0.172006 0.868300 1.000000 3 1.287711 0.238781 1.000000 4 0.106923 0.917850 1.000000 5 0.748842 0.478355 1.000000 6 -0.968124 0.365234 1.000000 7 -2.409911 0.046780 0.467801 8 1.688046 0.135258 1.000000 9 -0.014163 0.989095 1.000000
本教程提供了完整的解释:https://www.statology.org/studentized-residuals-in-python/
我在处理同样的问题。解决方案是使用statsmodels库:
statsmodels
from statsmodels.stats.outliers_influence import OLSInfluence
它包含一个resid_studentized_internal方法
resid_studentized_internal
Nodar的实现不正确这里是https://newonlinecourses.science.psu.edu/stat501/node/339/中更正的公式以及删除的studentized剩余值,以防人们不想使用statsmodels包。两个公式返回的结果与上面链接中的示例相同
使用OLSRresults.outlier_test()函数生成一个数据集,该数据集包含每个观察的studentized残差
例如:
本教程提供了完整的解释:https://www.statology.org/studentized-residuals-in-python/
我在处理同样的问题。解决方案是使用
statsmodels
库:它包含一个
resid_studentized_internal
方法