This is a pure Julia loess implementation, based on the fast kd-tree based approximation described in the original Cleveland, et al papers, implemented in the netlib loess C/Fortran code, and used by many, including in R's loess function.
Loess exports two functions:
predict, that train and apply the model, respectively.
using Loess xs = 10 .* rand(100) ys = sin.(xs) .+ 0.5 * rand(100) model = loess(xs, ys) us = range(extrema(xs)...; step = 0.1) vs = predict(model, us) using Gadfly p = plot(x=xs, y=ys, Geom.point, Guide.xlabel("x"), Guide.ylabel("y"), layer(Geom.line, x=us, y=vs)) draw(SVG("loess.svg", 6inch, 3inch), p)
There's also a shortcut in Gadfly to draw these plots:
plot(x=xs, y=ys, Geom.point, Geom.smooth, Guide.xlabel("x"), Guide.ylabel("y"))
Multivariate regression is not yet fully implemented, but most of the parts are already there, and wouldn't require too much additional work.
2 months ago