首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中计算学生化残差?

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

Stack Overflow用户
提问于 2017-08-03 21:07:35
回答 4查看 6K关注 0票数 9

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

提前谢谢。

更新:我已经找到答案了。我可以从OLS结果的outlier_test()函数中获得包含学院化残差的数据帧。

EN

回答 4

Stack Overflow用户

发布于 2019-12-24 00:59:24

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

代码语言:javascript
复制
from statsmodels.stats.outliers_influence import OLSInfluence

它包含一个resid_studentized_internal方法。

票数 5
EN

Stack Overflow用户

发布于 2019-07-23 09:32:36

Nodar的实现是不正确的,这里是来自https://newonlinecourses.science.psu.edu/stat501/node/339/的修正公式,以及删除的学院化残差,以防人们不想使用statsmodels包。这两个公式返回的结果与上面链接中的示例相同

代码语言:javascript
复制
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]
票数 3
EN

Stack Overflow用户

发布于 2020-12-04 01:07:17

使用OLSRresults.outlier_test()函数生成一个数据集,其中包含每个观察值的学生化残差。

例如:

代码语言:javascript
复制
#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/

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45485144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档