function addLoess3(
array,
{
xKey,
yKey,
xAccessor = (d) => d[xKey],
yAccessor = (d) => d[yKey],
outKey,
bandwidth
}
) {
const filtered = array.filter(
(d) => Number.isFinite(yAccessor(d)) && Number.isFinite(xAccessor(d))
);
const xFiltered = filtered.map(xAccessor);
const y = filtered.map(yAccessor);
const model = new Loess(
{
x: xFiltered,
y
},
{ span: bandwidth }
);
const fit = model.predict();
const fitted = fit.fitted.map((d, i) => ({ index: xFiltered[i], value: d }));
console.log("SLERB", fitted);
return array.map((d) => {
const loessValue = fitted.find((e) => e.index === d.index)?.value ?? null;
return { ...d, [outKey]: loessValue };
});
}