R を使用して 3 つの異なる空間分布のポイント (N = 20 ポイント) を生成する簡単な方法は何でしょうか?たとえば、1) ランダム、2) 均一、3) 同じ空間 (50 x 50 グリッド) にクラスター化されていますか?
2 に答える
少し遅れていますが、上記の回答は実際には問題に対処していません。探しているものは次のとおりです。
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')
2 番目: 定期的なサンプリング
# regular sampling
regular.pt <- spsample(x = grid, n= 20, type = 'regular')
3番目: ランダムな場所から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')
1) 各方向に 1 つずつ番号が付けられた 25 x 25 のグリッドで 5 ポイントの非常に均等な間隔を取得する 1 つの方法を次に示します。(3,18)、(8,3)、(13,13)、(18,23)、(23,8) に点を置きます。そこから一般化できるはずです。
2)あなたが提案するように、runif
...を使用できますが、あなたの質問から、実際に格子上の点(つまり整数)が必要であると想定していましたsample
。
離散確率変数ではなく連続確率変数が必要ですか?
3) これは「未決定」です - 物事をどのように定義したいかによって、それを行う方法がたくさんあります。たとえば、グリッド上にある場合、既にサンプリングされたポイントに近い (しかし正確にはそうではない) ポイントが、遠くにあるポイントよりもはるかに高い確率を持つように、ポイントをサンプリングできます。連続変数に対しても同様の設定が機能します。または、必要以上のポイントを生成して、最も孤独なものを排除することもできます。または、ランダムな一様な点から始めて、隣接する点に引き寄せられるようにすることもできます。または、いくつかのクラスター中心 (たとえば 4 ~ 10) を生成し、それらの中心の周りにポイントを分散させることもできます。または、他に何百ものことを行うことができます。