Altair绘制LOESS拟合线远低于样本均值及线性回归线问题排查
问题原因
- 你当前的LOESS拟合使用的是未聚合的原始面板数据,而你绘制的散点是各时间点的平均逮捕率。原始数据中的逮捕率呈明显右偏分布:多数地区的逮捕率较低,仅少数地区逮捕率偏高。对原始个体观测做LOESS拟合时,局部加权计算会被大量低值观测拉低,最终导致拟合线整体低于均值水平。
- 线性回归之所以能和均值点对齐,是因为线性模型的一阶矩特性决定了全量个体数据的拟合结果,与分组均值的拟合结果完全一致,LOESS作为非线性局部拟合方法不具备该特性。
修复方案
你需要拟合的是月度平均逮捕率的变化趋势,直接将LOESS图层的数据源从原始面板数据panel替换为已经计算好的分组均值数据grouped_means即可,修改后的LOESS代码如下:
loess = ( alt.Chart(grouped_means) .encode( x=alt.X("years_w_decimals", scale=alt.Scale(zero=False)), y=alt.Y("arrest_rate", scale=alt.Scale(zero=False)), ) .transform_loess(on="years_w_decimals", loess="arrest_rate", bandwidth=0.3) .mark_line() )
修改后LOESS拟合线就会贴合各月度均值的变化趋势。
内容的提问来源于stack exchange,提问作者nick_eu
相关产品推荐
相关产品推荐

