【问题标题】:How to calculate Cooks Distance, DFFITS using python statsmodel如何使用 python statsmodel 计算 Cooks 距离、DFFITS
【发布时间】:2018-12-25 16:13:27
【问题描述】:

我想在 Python 中使用 statsmodel 计算 Cooks_dDFFITS

这是我的 Python 代码:

X = your_str_cleaned[param]
y = your_str_cleaned['Visitor']
X = sm.add_constant(X)
model = sm.OLS(y, X)
results = model.fit()

我尝试使用它来获取Cooks DistanceDFFITS

import statsmodels.stats.outliers_influence as st_inf
st_inf.OLSInfluence.summary_frame(results)

但我收到此错误:

“OLSResults”对象没有“结果”属性。

谁能帮我找出哪里出错了?

【问题讨论】:

  • 如答案所示,使用get_influence 更容易。在这种情况下,调用参数是错误的。它应该将结果提供给 OLSInfluence 而不是汇总,即st_inf.OLSInfluence(results).summary_frame() 应该可以工作。

标签: python statistics statsmodels


【解决方案1】:

我遇到了同样的问题,所以我不得不想办法解决。我没有太多经验,这并不能解决OLSInfluence 的根本问题。但它会给你summary_frame

我将使用 pandas 数据框作为数据源。即使您在其他对象(如数组)中拥有它,您也可以相对轻松地将它们转换为数据框。为了展示它是如何工作的,我将从sklearn.datasets 导入波士顿房价数据集:

import pandas as pd
from sklearn.datasets import load_boston

#imports dataset
boston = load_boston()

#generates DataFrame bos
bos = pd.DataFrame(boston.data)

#adds columns names to bos
bos.columns = boston.feature_names 

#adds column 'PRICE' to bos
bos['PRICE'] = boston.target

现在让我们考虑'RM' 列和'PRICE' 列之间的关系,以'RM' 作为自变量。为简单起见,让我们考虑简单的 OLS。真正的答案来了:

from statsmodels.formula.api import ols

m = ols('PRICE ~ RM',bos).fit()
infl = m.get_influence()
sm_fr = infl.summary_frame()

sm_fr 具有您要查找的列 cooks_ddffits

【讨论】:

  • 谢谢。这解决了我的问题。您还可以通过在代码中分别使用以下方法直接获取 dffits 和厨师距离: (c,p) = m.dffits 和 (c,p) = m.cooks_distance。 c 包含值,p 是 p 值。
猜你喜欢
  • 2020-07-08
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多