使用 R 生成 3 个不同的点空间分布(N = 20 个点)的简单方法是什么。例如,1)随机、2)均匀和 3)聚集在同一空间(50 x 50 网格)上?
问问题
1316 次
2 回答
0
1) 这是一种在 25 x 25 网格中获得非常均匀的 5 个点间距的方法,每个方向从 1 开始编号。将点放在 (3,18), (8,3), (13,13), (18,23), (23,8); 你应该能够从那里概括。
2)正如您所建议的,您可以使用runif
... 但我从您的问题中假设您实际上想要点阵(即整数),在这种情况下您可以使用sample
.
您确定要连续而不是离散随机变量吗?
3)这个是“不确定的”——取决于你想如何定义事物,有很多方法可以做到。例如,如果它在网格上,您可以以这样一种方式对点进行采样,即靠近(但不完全在)已经采样点的点比更远的点具有更高的概率;类似的设置适用于连续变量。或者你可以产生比你需要的更多的分数并消除最孤独的分数。或者你可以从随机的均匀点开始,它们会让它们被邻居吸引。或者您可以生成一些聚类中心(例如 4-10 个),然后围绕这些中心散布点。或者你可以做一百件事中的任何一件。
于 2013-06-10T01:55:20.910 回答
0
有点晚了,但上面的答案并没有真正解决问题。这是您要查找的内容:
library(sp)
# make a grid of size 50*50
x1<-seq(1:50)-0.5
x2<-x1
grid<-expand.grid(x1,x2)
names(grid)<-c("x1","x2")
# make a grid a spatial object
coordinates(grid) <- ~x1+x2
gridded(grid) <- TRUE
第一:随机抽样
# random sampling
random.pt <- spsample(x = grid, n= 20, type = 'random')
二:定期抽样
# regular sampling
regular.pt <- spsample(x = grid, n= 20, type = 'regular')
第三:聚集在距离随机位置2的地方(可以去区域外)
# random sampling of one location
ori <- data.frame(spsample(x = grid, n= 1, type = 'random'))
# select randomly 20 distances between 0 and 2
n.point <- 20
h <- rnorm(n.point, 1:2)
# empty dataframe
dxy <- data.frame(matrix(nrow=n.point, ncol=2))
# take a random angle from the randomly selected location and make a dataframe of the new distances from the original sampling points, in a random direction
angle <- runif(n = n.point,min=0,max=2*pi)
dxy[,1]= h*sin(angle)
dxy[,2]= h*cos(angle)
cluster <- data.frame(x=rep(NA, 20), y=rep(NA, 20))
cluster$x <- ori$coords.x1 + dxy$X1
cluster$y <- ori$coords.x2 + dxy$X2
# make a spatial object and plot
coordinates(cluster)<- ~ x+y
plot(grid)
plot(cluster, add=T, col='green')
plot(random.pt, add=T, col= 'red')
plot(regular.pt, add=T, col= 'blue')
于 2018-10-16T05:36:25.967 回答