自定义平滑内核

Custom smoothing kernel

我想在 spatstat 中使用 Smooth.ppp 来根据特定函数计算一种“移动平均线”。我想使用的特定距离相关权重由函数 wt 给出;为简单起见[​​=12=]

wt=function(x,y) exp(-1e5*(x-y)^2)

在 wt=kernel 的极端情况下,我预计不会进行平滑(即输入标记 = 平滑估计)。我想知道我对内核及其应用方式有何误解?

remotes::install_github("spatstat/spatstat.core")
n=4; PPP=ppp(rep(1:n,each=n),rep(1:n,n), c(1,n),c(1,n), marks=1:n^2);
smo=Smooth.ppp(PPP,cutoff=2,kernel=wt,at="points")
rbind(marks(PPP),smo)

(我正在使用最新的 spatstat 版本以允许在使用自定义内核的点进行估计)

这个例子可能被误解了。

内核应该是 R 语言中的 function(x, y),它在以原点 (0,0) 为中心的空间位置 (x,y) 处给出内核的值。通常内核在 (x,y) 接近 (0,0) 时取其最大值,而在 (x,y) 远离 (0,0) 时降至零。

您的示例中定义的函数 wt 沿对角线 x = y 的值接近 1,并在远离对角线时迅速降至零。

这很不寻常。这意味着位置 (a,b) 处的数据点将沿着无限直线 'smoothed' 通过具有单位斜率的数据点,方程式 y = x + b-a,而不是像通常那样在靠近 (a,b) 的区域进行平滑处理。

示例点模式 PPP 由沿对角线 y=x.

的点组成

数据点的平滑值是所有数据点标记值的加权平均值,权重与核值成正比。在您的示例中,每对数据点 wt(x1-x2, y1-y2) 的内核值等于 1,因为所有数据和查询点都位于斜率为 1 的同一条直线上。

这个例子中的核权重都相等,所以平滑后的值应该都等于平均标记值,如果leaveoneout=FALSE,如果leaveoneout=TRUE那么数据点的平滑值i是除i.

点以外的数据点处标记值的平均值