python - regplot() 的强大选项到底有什么作用?
问题描述
与这个问题相关,我想知道robust
seaborn 的 regplot() 中的选项实际上做了什么。
描述如下:
如果
True
,用于statsmodels
估计稳健回归。这将减轻异常值的权重。请注意,这比标准线性回归的计算量要大得多,因此您可能希望减少引导重采样 (n_boot
) 的数量或设置ci
为None
。
这是否意味着它更类似于 Kendall 或 Spearman 相关性的工作方式,因为众所周知它们对异常值具有鲁棒性?还是彼此之间没有任何关系?换句话说,在为某些数据计算 Kendall 并用 绘制散点图时regplot()
,使用 是否有意义robust=True
?
解决方案
相关系数与回归系数
Kendall和Spearman相关是衡量两个变量相关程度的指标,即两个变量的相关程度。结果是一个相关系数,它是一个统计数据,它告诉您事物的相关程度(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=True
calls by default statsmodels.robust.robust_linear_model.RLM
,默认情况下使用HuberT()
标准。正因为如此,如果你想报告相关系数之类的东西,我的直觉是你必须使用一些Huber 损失的度量(你可能会在这里找到更多信息)。或者,您可以阅读这篇论文似乎对稳健的相关系数替代方案有一些见解。
推荐阅读
- python - 如何自动解析 JSON 并获取变量中的所有键值对?
- javascript - 选项卡时选择2表单控件不聚焦
- node.js - 在对象数组中插入值(猫鼬)
- c++ - 如何使用 cpplint 获得置信度?
- php - 设置整个范围的 PHP if 语句,以便从中提取代码
- php - 如何从我的基本 PHP 网站中的其他页面循环和读取 PHP 变量?
- sqlite - 为什么自动补全在 xeous-sqlite 中对字段和表格的名称不起作用
- django - 如何对失败的 Django LDAP 连接进行故障排除
- c++ - 如何解决 Visual Studio 2015 中的此编译错误?
- c++ - 调整窗口大小时如何调整屏幕位置(glfw/opengl)