loess predict with new x values

前端 未结 3 1613
轮回少年
轮回少年 2021-02-05 22:29

I am attempting to understand how the predict.loess function is able to compute new predicted values (y_hat) at points x that do not exist

相关标签:
3条回答
  • 2021-02-05 23:07

    However, because there are no coefficients being stored, the "model" in this case is simply the details of what was used to predict each y_hat

    Maybe you have used print(mdl) command or simply mdl to see what the model mdl contains, but this is not the case. The model is really complicated and stores a big number of parameters.

    To have an idea what's inside, you may use unlist(mdl) and see the big list of parameters in it.

    This is a part of the manual of the command describing how it really works:

    Fitting is done locally. That is, for the fit at point x, the fit is made using points in a neighbourhood of x, weighted by their distance from x (with differences in ‘parametric’ variables being ignored when computing the distance). The size of the neighbourhood is controlled by α (set by span or enp.target). For α < 1, the neighbourhood includes proportion α of the points, and these have tricubic weighting (proportional to (1 - (dist/maxdist)^3)^3). For α > 1, all points are used, with the ‘maximum distance’ assumed to be α^(1/p) times the actual maximum distance for p explanatory variables.

    For the default family, fitting is by (weighted) least squares. For family="symmetric" a few iterations of an M-estimation procedure with Tukey's biweight are used. Be aware that as the initial value is the least-squares fit, this need not be a very resistant fit.

    What I believe is that it tries to fit a polynomial model in the neighborhood of every point (not just a single polynomial for the whole set). But the neighborhood does not mean only one point before and one point after, if I was implementing such a function I put a big weight on the nearest points to the point x, and lower weights to distal points, and tried to fit a polynomial that fits the highest total weight.

    Then if the given x' for which height should be predicted is closest to point x, I tried to use the polynomial fitted on the neighborhoods of the point x - say P(x) - and applied it over x' - say P(x') - and that would be the prediction.

    Let me know if you are looking for anything special.

    0 讨论(0)
  • 2021-02-05 23:22

    To better understand what is happening in a loess fit try running the loess.demo function from the TeachingDemos package. This lets you interactively click on the plot (even between points) and it then shows the set of points and their weights used in the prediction and the predicted line/curve for that point.

    Note also that the default for loess is to do a second smoothing/interpolating on the loess fit, so what you see in the fitted object is probably not the true loess fitting information, but the secondary smoothing.

    0 讨论(0)
  • 2021-02-05 23:26

    Found the answer on page 42 of the manual:

    In this algorithm a set of points typically small in number is selected for direct    
    computation using the loess fitting method and a surface is evaluated using an interpolation
    method that is based on blending functions. The space of the factors is divided into
    rectangular cells using an algorithm based on k-d trees. The loess fit is evaluated at
    the cell vertices and then blending functions do the interpolation. The output data
    structure stores the k-d trees and the fits at the vertices. This information
    is used by predict() to carry out the interpolation.
    
    0 讨论(0)
提交回复
热议问题