Python regplot()和#x27;什么是稳健的选择?

Python regplot()和#x27;什么是稳健的选择?,python,matplotlib,scipy,seaborn,correlation,Python,Matplotlib,Scipy,Seaborn,Correlation,与之相关的是,我想知道seaborn的regplot()中的robust选项实际上做了什么 说明如下: 如果True,则使用statsmodels估计稳健回归。这将降低异常值的权重。请注意,这比标准线性回归在计算上更加密集,因此您可能希望减少引导重采样的次数(n_boot)或将ci设置为None 这是否意味着它更类似于Kendall或Spearman相关性的工作方式,因为它们对异常值具有鲁棒性?或者这两者之间没有任何关系?换句话说,当计算某些数据的Kendall,并使用regplot()绘制散点

与之相关的是,我想知道seaborn的regplot()中的
robust
选项实际上做了什么

说明如下:

如果
True
,则使用
statsmodels
估计稳健回归。这将降低异常值的权重。请注意,这比标准线性回归在计算上更加密集,因此您可能希望减少引导重采样的次数(
n_boot
)或将
ci
设置为
None

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

相关系数与回归系数是否有意义 相关性是衡量两个变量的相关性,即两个变量的相关性。结果是一个相关系数,这是一个统计数据,可以告诉你事物之间的关联程度(
1
是一个完美的关系,
0
是一个完美的无关联关系),粗略地说,这种关联的方向性(
-1
表示负斜率)。值得注意的是,Spearman和Kendall相关系数对异常值都很敏感,Spearman方法更为敏感

另一方面,是线性回归的一个特例,它是一种寻找两个或多个变量之间关系的方法。你可以把它看作是找到“最佳拟合线”的一种方法。线性回归的结果是回归系数,这是一种测量响应如何随变量变化(方向和斜率)的方法

“经典”与稳健线性回归 通常,线性回归用于查找回归系数,目标是最小化残差的平方和(估计线和实际数据之间的差的平方根)。这对异常值非常敏感:

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\u linear\u model.RLM所做的,在seaborn中使用
robust=True
时会调用它。在与之前相同的数据上,结果如下:

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

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

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

使用哪个相关系数?
如果要继续报告Kendall相关系数,在可视化数据时不要使用
robust
参数。这将产生误导,因为Kendall的误差敏感性将无法与稳健线性回归所表示的相比较(为了说明这可能会有多大的变化,在我上面的数据中,Kendall相关性为0.85,spearman相关系数为0.93)<默认情况下,code>sns.regplot()
with
robust=True
调用,默认情况下使用
HuberT()
标准。正因为如此,若你们想报告相关系数之类的东西,我的直觉是你们必须使用一些度量(你们可能会找到更多关于这个的信息)。或者,您可以阅读,它似乎对稳健的相关系数备选方案有一些见解。

谢谢您详细的回答。然而,您说斯皮尔曼对异常值更为稳健,这与我迄今为止所读到的所有内容形成了对比。我遇到的所有文献都告诉我,斯皮尔曼速度更快,但对异常值的鲁棒性较差。谢谢你的关注!你完全正确,这实际上是说“敏感”:。。。据我所知,肯德尔和斯皮尔曼都是敏感指标。