将核密度估计提取到 R 中的新样本点
Extracting kernel density estimates to a new sample points in R
我有 400 个多边形和散布在它们上面的点的空间参考数据(shapefile)。我希望根据它包含的点为每个多边形创建核密度估计栅格。之后,我想为每个多边形创建一个包含 100 个随机点的样本,其中每个点都有一个空间参考(x 和 y 坐标)和一个 kde 值。到目前为止,我所做的只是使用 'ppp.density' 函数创建一个多边形形状的 kde 图像,但输出结果与文档中描述的不同,我不知道是什么格式它是以及如何获得新点样本的 kde 值。
如有任何帮助,我们将不胜感激。
buffer <- st_read(".../.././buffers.shp")
pbb<- st_read(".../.../.././pbb.shp")
library(spatstat)
for (p in 1:400) {
if(p %in% pbb$value) {
poly123<- pbb[pbb$value == p,]
C <- as.owin(buffer$geometry[p])
point<- ppp(poly123$X,poly123$Y, window = C)
d <- density(point, kernel = "gaussian")
plot(d)
kde plot
The 'density' output is this:
您正在使用 spatstat
包中的函数 density.ppp
(不是“ppp.density”)。
如果 p
是点模式 (class ppp
),则 D <- density(p)
计算未归一化的核密度估计。有关说明和示例,请参阅 help(density.ppp)
。
结果 D
是一个像素图像 (class im
),可以打印、绘图和子集化等。(在你的问题中,你刚刚打印了内部结构im
对象的。)
计算出像素图像D
后,如果你想知道D
在某些空间位置的值,那么你可以
- 将查询位置做成一个点模式
X
,然后通过values <- D[X]
提取这些位置的数值;或
- 通过
f <- as.function(D)
将像素图像转换为函数,然后通过 values <- f(x,y)
. 在所需坐标 x,y
处计算函数
如果您想知道原始数据位置p
的密度值,那么使用at
参数会更快更准确到 density.ppp
:
values <- density(p, at="points")
警告:在您的示例(以及上面的示例)中,未指定平滑带宽 sigma
。 sigma
的默认值可能无法满足您的数据要求。请参阅 density.ppp
.
的帮助文件和示例
我有 400 个多边形和散布在它们上面的点的空间参考数据(shapefile)。我希望根据它包含的点为每个多边形创建核密度估计栅格。之后,我想为每个多边形创建一个包含 100 个随机点的样本,其中每个点都有一个空间参考(x 和 y 坐标)和一个 kde 值。到目前为止,我所做的只是使用 'ppp.density' 函数创建一个多边形形状的 kde 图像,但输出结果与文档中描述的不同,我不知道是什么格式它是以及如何获得新点样本的 kde 值。
如有任何帮助,我们将不胜感激。
buffer <- st_read(".../.././buffers.shp")
pbb<- st_read(".../.../.././pbb.shp")
library(spatstat)
for (p in 1:400) {
if(p %in% pbb$value) {
poly123<- pbb[pbb$value == p,]
C <- as.owin(buffer$geometry[p])
point<- ppp(poly123$X,poly123$Y, window = C)
d <- density(point, kernel = "gaussian")
plot(d)
kde plot
The 'density' output is this:
您正在使用 spatstat
包中的函数 density.ppp
(不是“ppp.density”)。
如果 p
是点模式 (class ppp
),则 D <- density(p)
计算未归一化的核密度估计。有关说明和示例,请参阅 help(density.ppp)
。
结果 D
是一个像素图像 (class im
),可以打印、绘图和子集化等。(在你的问题中,你刚刚打印了内部结构im
对象的。)
计算出像素图像D
后,如果你想知道D
在某些空间位置的值,那么你可以
- 将查询位置做成一个点模式
X
,然后通过values <- D[X]
提取这些位置的数值;或 - 通过
f <- as.function(D)
将像素图像转换为函数,然后通过values <- f(x,y)
. 在所需坐标
x,y
处计算函数
如果您想知道原始数据位置p
的密度值,那么使用at
参数会更快更准确到 density.ppp
:
values <- density(p, at="points")
警告:在您的示例(以及上面的示例)中,未指定平滑带宽 sigma
。 sigma
的默认值可能无法满足您的数据要求。请参阅 density.ppp
.