Bra*_*roy 4 python matplotlib scipy correlation seaborn
与此问题相关,我想知道robustseaborn 的 regplot() 中的选项实际上做了什么。
描述如下:
如果
True,用于statsmodels估计稳健回归。这将减轻异常值的权重。请注意,这比标准线性回归在计算上要密集得多,因此您可能希望减少引导程序重采样的数量 (n_boot) 或设置ci为None。
这是否意味着它更类似于 Kendall 或 Spearman 相关性的工作方式,因为众所周知它们对异常值具有鲁棒性?还是彼此之间没有任何关系?换句话说,在为某些数据计算 Kendall 并使用 绘制散点图时regplot(),使用robust=True是否有意义?
Kendall和Spearman相关性是衡量两个变量相关程度的度量,即两个变量的相关程度如何。结果是一个相关系数,它是一个统计数据,它告诉您事物的相关性(1是完美的关系,0是完美的无关系),从粗略的意义上讲,该相关性的方向性(-1表示负斜率) . 同样重要的是要注意 Spearman 和 Kendall 相关系数对异常值都很敏感,Spearman 方法更敏感。
另一方面,稳健线性回归是线性回归的一个特例,它是一种寻找 2 个或更多变量之间关系的方法。您可以将其视为一种寻找“最佳拟合线”的方法。线性回归的结果是回归系数,它衡量您的响应如何(方向和斜率)随变量变化。
通常,线性回归使用普通最小二乘法或 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)
Run Code Online (Sandbox Code Playgroud)
注意线是如何被离群值拖下的。在很多情况下,这是您希望看到的行为。
另一方面,稳健的回归方法通常使用不同的度量来查找 OLS 之外的回归系数,例如最小化最小修整平方,它本质上是数据子集上的平方和(从这个意义上说,它类似于引导)。通常,这是迭代完成的,相应地对结果进行加权,以便给定的异常值最终不会对您的系数产生巨大影响。这就是statsmodels.robust.robust_linear_model.RLM它的作用,当您robust = True在 seaborn 中使用时会调用它。结果,在与之前相同的数据上:
sns.regplot(x,y,robust = True)
Run Code Online (Sandbox Code Playgroud)
请注意,这条线没有被您的异常值拖下来。在很多情况下,这不是人们想要的行为,但这取决于你在做什么......
注意:这在计算上确实很昂贵(仅对于那 50 个数据点,在我的机器上运行大约需要 5 秒)。
如果您想继续报告您的 Kendall 相关系数,请不要robust在可视化数据时使用该参数。这会产生误导,因为 Kendall 的误差敏感性将无法与您的稳健线性回归所代表的相比(为了说明这可以变化多少,在我上面的数据中,Kendall 相关系数为 0.85,spearman 相关系数为 0.93 )。sns.regplot()with robust=Truecall by default statsmodels.robust.robust_linear_model.RLM,默认情况下使用HuberT()标准。正因为如此,如果你想报告相关系数之类的东西,我的直觉是你必须使用一些Huber 损失的度量(你可能会在这里找到更多相关信息)。或者,你可以阅读这篇论文似乎对稳健相关系数替代方案有一些见解。