核密度估计 - 将图例比例更改为每平方米密度

Kernel Density Estimation - change legend scale to density per m²

我已经为 R 中的一个物种计算了核密度估计 (KDE),我正在使用 ants 数据集(蚂蚁巢) 来自 spatstat 为简单起见,我想要一个图例比例尺,其中包含每个测量单位(例如平方米)的蚂蚁巢穴数量。如果我理解正确,KDE 图例显示的概率密度介于 0 和 1 之间,我如何将此概率转换为 "real-world" 密度,例如每平方米的点数(蚂蚁巢)?

enter image description here

举个例子:

require("spatstat")
data(ants)
dat <- ants

# estimate bandwith
h_cox <- bw.diggle(dat)

# calculate KDE
kd_cox <- density(dat, h_cox, diggle=TRUE, se=TRUE, eps=diff(dat$window$xrange)/500)

# Plot KDE, contours and points
plot(kd_cox$estimate, main="KDE ants bw.diggle")
contour(kd_cox$estimate, labels="", add=TRUE, col=gray(.5)) 
points(dat)

感谢您使用示例数据提出明确的问题。

library(spatstat)

原始 ants 数据以 0.5 英尺为单位给出:

ants
#> Marked planar point pattern: 97 points
#> Multitype, with levels = Cataglyphis, Messor 
#> window: polygonal boundary
#> enclosing rectangle: [-25, 803] x [-49, 717] units (one unit = 0.5 feet)

因此原始代码中的代码 post 给出了点数的强度 每“0.5 平方英尺”,即每“四分之一平方英尺”的点数。 使用不带参数的 rescale 得到通常的脚:

ants_ft <- rescale(ants)
ants_ft
#> Marked planar point pattern: 97 points
#> Multitype, with levels = Cataglyphis, Messor 
#> window: polygonal boundary
#> enclosing rectangle: [-12.5, 401.5] x [-24.5, 349.5] feet

使用 rescale 与转换系数和名称来获得米:

ants_m <- rescale(ants_ft, 3.2808399, "m")
ants_m
#> Marked planar point pattern: 97 points
#> Multitype, with levels = Cataglyphis, Messor 
#> window: polygonal boundary
#> enclosing rectangle: [-3.81, 122.3772] x [-7.4676, 106.5276] m

研究区域面积及每平方米平均点数:

area(ants_m)
#> [1] 9962.028
intensity(ants_m)
#> Cataglyphis      Messor 
#> 0.002911054 0.006825920
intensity(unmark(ants_m))
#> [1] 0.009736973

dat <- ants_m 重新运行原始代码可以得到 每平方米点数的估计强度:

dat <- ants_m
# estimate bandwith
h_cox <- bw.diggle(dat)
#> Warning: Berman-Diggle Cross-Validation criterion was minimised at right-hand
#> end of interval [0, 7.11]; use argument 'hmax' to specify a wider interval for
#> bandwidth 'sigma'
# calculate KDE
kd_cox <- density(dat, h_cox, diggle=TRUE, se=TRUE, eps=diff(dat$window$xrange)/500)
# Plot KDE, contours and points
plot(kd_cox$estimate, main="KDE ants bw.diggle")
contour(kd_cox$estimate, labels="", add=TRUE, col=gray(.5)) 
points(dat)