首页 > 解决方案 > regplot() 的强大选项到底有什么作用?

问题描述

这个问题相关,我想知道robustseaborn 的 regplot() 中的选项实际上做了什么。

描述如下:

如果True,用于statsmodels估计稳健回归。这将减轻异常值的权重。请注意,这比标准线性回归的计算量要大得多,因此您可能希望减少引导重采样 ( n_boot) 的数量或设置ciNone

这是否意味着它更类似于 Kendall 或 Spearman 相关性的工作方式,因为众所周知它们对异常值具有鲁棒性?还是彼此之间没有任何关系?换句话说,在为某些数据计算 Kendall 并用 绘制散点图时regplot(),使用 是否有意义robust=True

标签: pythonmatplotlibscipyseaborncorrelation

解决方案


相关系数与回归系数

KendallSpearman相关是衡量两个变量相关程度的指标,两个变量的相关程度。结果是一个相关系数,它是一个统计数据,它告诉您事物的相关程度(1是完美的关系,0是完全没有关系),粗略地说,该相关性的方向性(-1表示负斜率) . 还需要注意的是,Spearman 和 Kendall 相关系数都对异常值敏感,而 Spearman 方法更敏感。

另一方面,稳健线性回归是线性回归的一种特殊情况,它是一种寻找两个或更多变量之间关系的方法。您可以将其视为一种寻找“最佳拟合线”的方法。线性回归的结果是回归系数,它是衡量您的响应如何(方向和斜率)随变量变化的量度。

“经典”与稳健线性回归

通常,线性回归使用普通最小二乘法或 OLS来查找回归系数,目标是最小化残差的平方和(估计线与实际数据之间差异的平方根)。这对异常值非常敏感:

x = np.arange(0,10,0.2)
y = (x*0.25)+np.random.normal(0,.1,50)
y[[12,14,18,24]] -= 4

sns.regplot(x,y, robust = False)

在此处输入图像描述

注意这条线是如何被异常值拖下的。在很多情况下,这是您希望看到的行为。

另一方面,稳健的回归方法通常使用不同的度量来找到 OLS 之外的回归系数,例如最小化最小修剪平方,它本质上是数据子集上的平方和(从这个意义上说,它类似于自举)。通常,这是迭代完成的,对结果进行相应的加权,因此给定的异常值最终不会对您的系数产生巨大影响。这是什么statsmodels.robust.robust_linear_model.RLM,当你robust = True在 seaborn 中使用时会调用它。结果,在与以前相同的数据上:

sns.regplot(x,y,robust = True)

在此处输入图像描述

请注意,这条线没有被您的异常值拖下。在很多情况下,这不是人们想要的行为,但这取决于你在做什么......

注意:这在计算上确实很昂贵(仅对于这 50 个数据点,在我的机器上运行大约需要 5 秒)。

使用哪个相关系数?

如果您想继续报告您的 Kendall 相关系数,请不要在可视化数据时使用robust参数。这将具有误导性,因为 Kendall 的误差敏感性无法与您的稳健线性回归所表示的相比(为了说明这可以变化多少,在我上面的数据中,Kendall 相关系数为 0.85,spearman 相关系数为 0.93 )。sns.regplot()with robust=Truecalls by default statsmodels.robust.robust_linear_model.RLM,默认情况下使用HuberT()标准。正因为如此,如果你想报告相关系数​​之类的东西,我的直觉是你必须使用一些Huber 损失的度量(你可能会在这里找到更多信息)。或者,您可以阅读这篇论文似乎对稳健的相关系数替代方案有一些见解。


推荐阅读