如何在 Python 中计算学生化残差?

Han*_*ura 9 python statistics

我试过寻找这个问题的答案,但到目前为止我还没有找到任何答案。我使用 statsmodel 在均值插补数据集上实现了普通最小二乘回归模型。我可以访问 OLS 结果中的残差列表,但不能访问学生化残差。如何计算/获得学生化残差?我知道计算学生残差的公式,但我不确定如何在 Python 中编写这个公式。

提前致谢。

更新:我找到了答案。我可以从 OLS reults 的 outlier_test() 函数中获得一个包含学生化残差的数据框。

小智 5

我正在处理同样的问题。解决方案是使用statsmodels库:

from statsmodels.stats.outliers_influence import OLSInfluence
Run Code Online (Sandbox Code Playgroud)

它包含一个resid_studentized_internal方法。


Nod*_*ili 1

对于简单的线性回归,您可以使用以下方法计算学生化残差

将 X 和 Y 的平均值定义为:

mean_X = sum(X) / len(X) 
mean_Y = sum(Y) / len(Y) 
Run Code Online (Sandbox Code Playgroud)

现在您必须估计系数 beta_0 和 beta_1

beta1 = sum([(X[i] - mean_X)*(Y[i] - mean_Y) for i in range(len(X))]) / sum([(X[i] - mean_X)**2 for i in range(len(X))]) 
beta0 = mean_Y - beta1 * mean_X
Run Code Online (Sandbox Code Playgroud)

现在您需要使用此找到拟合值

y_hat = [beta0 + beta1*X[i] for i in range(len(X))]
Run Code Online (Sandbox Code Playgroud)

现在计算残差,即 Y - Y_hat

residuals = [Y[i] - y_hat[i] for i in range(len(Y))]
Run Code Online (Sandbox Code Playgroud)

我们需要找到H矩阵在此输入图像描述 其中X是自变量的矩阵。

为了找到杠杆,我们必须采用矩阵的对角线元素H,如下所示:

leverage = numpy.diagonal(H)
Run Code Online (Sandbox Code Playgroud)

如果回归为标准误差

Var_e = sum([(Y[i] - y_hat[i])**2 for i in range(len(Y)) ]) / (len(Y) -2)
SE_regression = math.sqrt(Var_e*[(1-leverage[i]) for i in range len(leverage)])
Run Code Online (Sandbox Code Playgroud)

现在您可以计算学生化残差

studentized_residuals = [residuals[i]/SE_regression for i in range(len(residuals))] 
Run Code Online (Sandbox Code Playgroud)

请注意,我们有两种类型的学生化残差。一是内部学生化残差,二是外部学生化残差

我的解决方案找到内部学生化残差。

我对我的计算进行了修正。对于外部学生化残差,请参阅@kkawabat的答案