我正在用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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在使用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距离,进而识别并检查那些因超过预设阈值而被视为离群值并从模型中移除的观测点。这样,您就可以验证这些异常值是否确实表现异常,以及它们对模型的影响程度。