我试着寻找这个问题的答案,但到目前为止还没有找到。我使用statsmodel在均值推算的数据集上实现了一个普通的最小二乘回归模型。我可以访问OLS结果中的残差列表,但不能访问学生化残差。我如何计算/获得学院化的残差?我知道计算学生化残差的公式,但我不太确定如何在Python中编写这个公式。
提前谢谢。
更新:我已经找到答案了。我可以从OLS结果的outlier_test()函数中获得包含学院化残差的数据帧。
发布于 2019-12-24 00:59:24
我也在处理同样的问题。解决方案是使用statsmodels库:
from statsmodels.stats.outliers_influence import OLSInfluence它包含一个resid_studentized_internal方法。
发布于 2019-07-23 09:32:36
Nodar的实现是不正确的,这里是来自https://newonlinecourses.science.psu.edu/stat501/node/339/的修正公式,以及删除的学院化残差,以防人们不想使用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]发布于 2020-12-04 01:07:17
使用OLSRresults.outlier_test()函数生成一个数据集,其中包含每个观察值的学生化残差。
例如:
#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/
https://stackoverflow.com/questions/45485144
复制相似问题