在 R 中生成具有核密度估计值的随机点

Generate random points with kernel density estimate values in R

我有一个包含数千个点和 400 个多边形的数据集,并根据其中的点为每个多边形创建了核密度估计(使用 kde2d 函数)。现在我想在每个多边形中生成 100 个随机点,并且每个点都将具有来自内核估计的密度值。

如何生成这些积分?

points<- st_read("pbb.shp")
polygons <- st_read("polygon.shp")


for (p in 1:400) {
  poly<- points[points$value == p,]
  kde <- kde2d(poly$X,poly$Y, n=100)

}

您的示例代码不可重现,因此我将创建一些假数据,并在我的代码中使用它:

x <- rexp(100)
y <- rnorm(100)
library(MASS)
kde <- kde2d(x, y, n = 100)

size <- 100  # Sample size wanted

# Sample cells from the density matrix
pts <- sample(length(kde$z), size, prob = as.numeric(kde$z))

# Generate the samples by choosing corresponding elements from
# the x and y vectors, and adding some fuzz
xfuzz <- diff(kde$x)[1]/2
sx <- kde$x[row(kde$z)[pts]] + runif(size, -xfuzz, xfuzz)
yfuzz <- diff(kde$y)[1]/2
sy <- kde$y[col(kde$z)[pts]] + runif(size, -yfuzz, yfuzz)

# Plot the original sample and the generated one
par(mfrow=c(1,2))
plot(x, y, main = "Real data")
plot(sx, sy, main = "Fake data")

reprex package (v0.3.0)

于 2021-01-25 创建