我试图了解如何 predict.loess
函数能够计算新的预测值(y_hat
)在点 x
在原始数据中不存在。例如(这是一个简单的例子,我意识到这种类型的例子显然不需要黄土,但它说明了这一点):
x <- 1:10
y <- x^2
mdl <- loess(y ~ x)
predict(mdl, 1.5)
[1] 2.25
loess
回归通过在每个处使用多项式来工作 x
因此它创造了一个预测 y_hat
在每一个 y
。但是,因为没有存储系数,所以在这种情况下的“模型”只是用于预测每个系数的细节 y_hat
例如, span
要么 degree
。当我做 predict(mdl, 1.5)
, 怎么 predict
能够在这个新的产生价值 x
?它是在两个最近的现有之间进行插值 x
价值观及其相关因素 y_hat
?如果是这样,它的具体细节是什么?
我看过了 cloess
在线文档但无法找到它讨论的地方。
但是,因为没有存储系数,所以在这种情况下的“模型”只是用于预测每个y_hat的细节。
也许你已经习惯了 print(mdl)
命令或简单 mdl
看看模特是什么 mdl
包含,但事实并非如此。该模型非常复杂,并存储了大量参数。
要知道里面有什么,你可以使用 unlist(mdl)
并查看其中的大参数列表。
这是命令手册的一部分,描述它是如何工作的:
配件在当地完成。也就是说,对于点x处的拟合,使用x附近的点进行拟合,通过它们与x的距离加权(在计算距离时忽略“参数”变量的差异)。邻域的大小由α控制(由span或enp.target设置)。对于α<1,邻域包括点的比例α,并且这些具有三重加权(与(1 - (dist / maxdist)^ 3)^ 3成比例。对于α> 1,使用所有点,假设“最大距离”是p解释变量的实际最大距离的α^(1 / p)倍。
对于默认族,拟合是通过(加权)最小二乘法。对于
family =“symmetric”M估计过程的几次迭代
使用Tukey的biweight。请注意,因为初始值是
最小二乘拟合,这不一定非常合适。
我认为它试图在每个点的邻域中拟合多项式模型(不仅仅是整个集合的单个多项式)。但是邻域并不仅仅意味着之前的一个点和之后的一个点,如果我正在实现这样的函数,我会对点x的最近点进行较大的权重,并将权重降低到远点,并尝试拟合多项式适合最高的总重量。
然后,如果应该预测高度的给定x'最接近点x,我试图使用拟合在点x的邻域上的多项式 - 比如P(x) - 并将其应用于x' - 说P(x) ') - 这就是预测。
如果您正在寻找任何特别的东西,请告诉我。
为了更好地了解黄土适合的情况,请尝试运行 loess.demo
来自TeachingDemos包的功能。这使您可以交互式地单击绘图(甚至在点之间),然后显示预测中使用的点集及其权重以及该点的预测线/曲线。
另请注意默认值 loess
是在黄土拟合上进行第二次平滑/插值,所以你在拟合物体中看到的可能不是真正的黄土拟合信息,而是二次平滑。
找到手册第42页的答案:
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.