在 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 创建
我有一个包含数千个点和 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 创建