开发者社区 问答 正文

计算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:45:31 901 分享 版权
阿里云 AI 助理回答

在Python的statsmodels库中,你可以直接使用.get_influence()方法来获取与每个观测值相关的诊断信息,包括学生化删除残差(studentized deletion residuals)和Cook距离。这不需要你手动实现这些统计量的计算。以下是如何进行操作的一个示例:

# 假设你已经有了ols_result对象
influence = ols_result.get_influence()

# 获取学生化删除残差
studentized_residuals = influence.resid_studentized_external

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

# 为了方便查看,你可能想把它们和原始数据对应起来
# 这里我们假设你的DataFrame是df,且已经用X, y进行了拟合
df['studentized_residuals'] = studentized_residuals
df['cook_distances'] = cook_distances.iloc[:, 0]  # 因为cooks_distance返回的是二维数组,我们只取第一列

# 现在你可以基于这些新增的列来分析哪些观测值可能是异常值

通过上述代码,你就可以获得每个样本的学生化删除残差和Cook距离,并将其添加到你的原始数据集df中。这样,你就可以直接比较被剔除的点与保留点在这两个指标上的表现,进而评估被删除的观测值是否确实表现为异常。

请注意,当你处理离群值时,迭代地移除最高Cook距离的点并重新拟合模型可能会导致过度拟合或选择偏差的问题,因此这种做法需要谨慎考虑。通常,离群值检测会结合领域知识、数据可视化以及统计测试结果综合判断。

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