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

2024-10-08 19:22:40 发布

您现在位置:Python中文网/ 问答频道 /正文

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

提前谢谢。在

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


Tags: 数据函数答案模型test列表学生公式
3条回答

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]

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

from statsmodels.stats.outliers_influence import OLSInfluence

它包含一个resid_studentized_internal方法。在

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

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

mean_X = sum(X) / len(X) 
mean_Y = sum(Y) / len(Y) 

现在你要估计系数β0和β1

^{2}$

现在,您需要通过使用

y_hat = [beta0 + beta1*X[i] for i in range(len(X))]

现在计算残差,也就是Y-Y\u

residuals = [Y[i] - y_hat[i] for i in range(len(Y))]

我们需要找到H矩阵,它是enter image description here 其中X是自变量的矩阵。在

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

leverage = numpy.diagonal(H)

如果回归为

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)])

现在你可以计算学生化的残差

studentized_residuals = [residuals[i]/SE_regression for i in range(len(residuals))] 

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

我的解决方案是找到内部学习的残差。在

我修正了我的计算。对于外部研究的残差,请参考@kkawabat的答案

相关问题 更多 >

    热门问题