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

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

您现在位置: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]

使用OLSRresults.outlier_test()函数生成一个数据集,该数据集包含每个观察的studentized残差

例如:

&13; 第13部分,;
#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
和#13;
和#13;

本教程提供了完整的解释:https://www.statology.org/studentized-residuals-in-python/

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

from statsmodels.stats.outliers_influence import OLSInfluence

它包含一个resid_studentized_internal方法

相关问题 更多 >

    热门问题