unk*_*own 4 r spatial coordinates
R中是否有一种方法可以生成它们之间的最小距离的随机坐标?
例如,我想避免
x <- c(0,3.9,4.1,8)
y <- c(1,4.1,3.9,7)
plot(x~y)
Run Code Online (Sandbox Code Playgroud)
这是来自随机几何的经典问题。落在不相交区域中的点数彼此独立的空间中的完全随机点对应于齐次Poisson点过程(在这种情况下,在R ^ 2中,但是几乎可以在任何空间中)。
一个重要的功能是,要使不相交区域中的点数具有独立性,总点数必须是随机的。
对于Poisson过程,点可以任意靠近在一起。如果通过对泊松过程进行采样直到没有任何点太靠近而定义了一个过程,那么您将拥有所谓的吉布斯硬核过程。在文献中对此进行了大量研究,并且有多种模拟方法。R程序包spatstat具有执行此操作的功能。rHardcore是一个理想的采样器,但是如果您想要高强度的点和较大的硬核距离,则它可能不会在有限的时间内终止...可以将分布作为马尔可夫链的极限,并使用以下rmh.default公式运行马尔可夫链:给定的吉布斯模型作为不变分布。这在有限的时间内完成,但仅给出了近似分布。
在rmh.default你还可以模拟在一个固定数量的点条件。请注意,当您在有限框中进行采样时,对于给定的硬核半径当然可以有多少个点有上限,而您越接近此极限,从分布中正确采样就越成问题。
library(spatstat)
beta <- 100; R = 0.1
win <- square(1) # Unit square for simulation
X1 <- rHardcore(beta, R, W = win) # Exact sampling -- beware it may run forever for some par.!
plot(X1, main = paste("Exact sim. of hardcore model; beta =", beta, "and R =", R))
Run Code Online (Sandbox Code Playgroud)

minnndist(X1) # Observed min. nearest neighbour dist.
#> [1] 0.102402
Run Code Online (Sandbox Code Playgroud)
model <- rmhmodel(cif="hardcore", par = list(beta=beta, hc=R), w = win)
X2 <- rmh(model)
#> Checking arguments..determining simulation windows...Starting simulation.
#> Initial state...Ready to simulate. Generating proposal points...Running Metropolis-Hastings.
plot(X2, main = paste("Approx. sim. of hardcore model; beta =", beta, "and R =", R))
Run Code Online (Sandbox Code Playgroud)

minnndist(X2) # Observed min. nearest neighbour dist.
#> [1] 0.1005433
Run Code Online (Sandbox Code Playgroud)
X3 <- rmh(model, control = rmhcontrol(p=1), start = list(n.start = 42))
#> Checking arguments..determining simulation windows...Starting simulation.
#> Initial state...Ready to simulate. Generating proposal points...Running Metropolis-Hastings.
plot(X3, main = paste("Approx. sim. given n =", 42))
Run Code Online (Sandbox Code Playgroud)

minnndist(X3) # Observed min. nearest neighbour dist.
#> [1] 0.1018068
Run Code Online (Sandbox Code Playgroud)