开发者社区 问答 正文

计算OLS预测的研究残差和outlier_test()

我正在用statmodel OLS做迭代的离群值消除。我已经安装模型使用。

ols_result = sm.OLS(y,X).fit()

然后我可以得到研究的删除剩余外部和bonferroni与

ols_result.outlier_test(method="bonf")

我正在删除超过bonferroni p > %10的样本,其中在每次迭代中厨师的距离也是最高的。直到没有带bonf(p)>%10的样本,我才得到原始样本的子集。 假设我有400个样本值在离群值删除后,我有380个样本值。现在我想找到研究过的缺失残差和bonferroni这是400个样本与380个样本的回归拟合。看看被删除的异常值是不是真的异常值。 这就是问题的开始。我正在寻找一种简单的方法来使用statmodels OLS模型来获得残差和拟合值的cook距离,而不是自己编写那些函数。但是.outlier_test()和.get_influence()似乎可以用于OLS结果对象。 你们有没有什么简单的方法来实现这些测试而不需要太多的代码等等。 谢谢提前 问题来源StackOverflow 地址:/questions/59466607/calculate-studentized-deletion-residuals-and-outlier-test-for-the-predictions

展开
收起
kun坤 2019-12-25 09:59:19 565 分享 版权
阿里云 AI 助理回答

在使用statsmodels库进行离群值检测和处理时,您可以通过get_influence方法直接获取残差、Cook距离等诊断信息,而不需要自己编写额外的函数。以下是如何实现您的需求的一个简单示例:

首先,确保您已经正确安装了statsmodels库并导入了必要的模块:

import statsmodels.api as sm
from statsmodels.formula.api import ols

假设您已经有了模型拟合的结果ols_result,接下来您可以使用get_influence来获取每个观测点的诊断信息,包括残差(resid)和Cook距离(cooks_distance)。

# 获取影响诊断信息
influence = ols_result.get_influence()

# 计算学生化删除残差(studentized residuals)
student_residuals = influence.resid_studentized_external

# 获取Cook距离
cook_distances = influence.cooks_distance[0]

# 为了找到被删除的异常值,我们可以比较原始样本数与剩余样本数,并对应查看这些样本的残差和Cook距离
deleted_indices = np.where(cook_distances > threshold)[0]  # 假设threshold是您设定的Bonferroni p值的阈值

# 打印或进一步分析被删除的异常值的残差和Cook距离
for idx in deleted_indices:
    print(f"Sample {idx} - Studentized Residual: {student_residuals[idx]}, Cook's Distance: {cook_distances[idx]}")

通过上述代码,您可以获得所有观测点的学生化删除残差和Cook距离,进而识别并检查那些因超过预设阈值而被视为离群值并从模型中移除的观测点。这样,您就可以验证这些异常值是否确实表现异常,以及它们对模型的影响程度。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: