Seaborn的jointplot用kind='resid'绘制残差结果异常是否为bug?
这不是seaborn残差绘图的实现bug,是参数使用逻辑不符导致的问题:
seaborn的residplot以及jointplot的kind='resid'模式,设计定位是自动帮用户计算残差:你需要传入原始自变量x、原始因变量y,函数内部会先拟合x对y的线性回归,再计算「真实y值 - 回归预测y值」得到残差,最终绘制残差分布。
你现在直接把提前计算好的残差作为y参数传入了kind='resid'模式,函数会默认你传入的是原始因变量,会再额外做一次x对残差的线性回归,计算「传入的残差 - 新回归的预测值」作为最终绘制的残差,这就是你看到lowess拟合线正负反转的原因。
而kind='reg'模式的逻辑是直接绘制你传入的x、y的散点和拟合线,你传入的y是提前算好的残差,它就会直接基于真实残差做拟合,结果自然是正确的。
解决方法
- 如果你已经提前计算好了残差,直接用
kind='scatter'或kind='reg'绘制即可,不需要使用kind='resid' - 如果你想使用
kind='resid'的自动残差计算能力,把y参数替换为你的原始因变量即可,不需要提前手动计算残差。
内容的提问来源于stack exchange,提问作者Hoppity81
相关产品推荐
相关产品推荐

