gpt4 book ai didi

R:为靠近指定位置的单元格采样矩阵

转载 作者:行者123 更新时间:2023-12-04 10:29:41 25 4
gpt4 key购买 nike

我正在尝试使用半随机选择方法寻找收集蜗牛的网站。我在我想要收集蜗牛的区域周围设置了一个 10 平方公里的网格,该区域被分成 10,000 个 10 平方米的单元格。我想在 R 中随机选择这个网格来选择 200 个现场站点。

在 R 中随机采样矩阵很容易;

dat <- matrix(1:10000, nrow = 100)

sample(dat, size = 200)

但是,我想偏向采样以选择更靠近单个位置的单元格(代表更靠近研究站的站点)。用图像更容易解释这一点;

enter image description here

带十字的黄色单元格代表我想要采样的位置。灰色阴影是在 sample中选择一个单元格的概率。功能,较暗的细胞更有可能被采样。

我知道我可以使用 prob 指定采样概率参数在 sample ,但我不知道如何创建二维概率矩阵。任何帮助将不胜感激,我不想手工完成。

最佳答案

我将针对 9 x 6 网格(54 个单元格)执行此操作,以便更容易查看正在发生的情况,并且仅对这 54 个单元格中的 5 个进行采样。您可以将其修改为 100 x 100 的网格,您可以在其中从 10,000 个单元格中采样 200 个。

# Number of rows and columns of the grid (modify these as required)
nx <- 9 # rows
ny <- 6 # columns

# Create coordinate matrix
x <- rep(1:nx, each=ny);x
y <- rep(1:ny, nx);y
xy <- cbind(x, y); xy

# Where is the station? (edit: not snails nest)
Station <- rbind(c(x=3, y=2)) # Change as required

# Determine distance from each grid location to the station
library(SpatialTools)
D <- dist2(xy, Station)

来自 dist2 的帮助页面

dist2 takes the matrices of coordinates coords1 and coords2 and returns the inter-Euclidean distances between coordinates.



我们可以使用 image 将其可视化。功能。
XY <- (matrix(D, nr=nx, byrow=TRUE))
image(XY) # axes are scaled to 0-1

# Create a scaling function - scales x to lie in [0-1)
scale_prop <- function(x, m=0)
(x - min(x)) / (m + max(x) - min(x))

# Add the coordinates to the grid
text(x=scale_prop(xy[,1]), y=scale_prop(xy[,2]), labels=paste(xy[,1],xy[,2],sep=","))

enter image description here

较浅的色调表示网格更靠近站点 (3,2) .
# Sampling probabilities will be proportional to the distance from the station, which are scaled to lie between [0 - 1). We don't want a 1 for the maximum distance (m=1).
prob <- 1 - scale_prop(D, m=1); range (prob)

# Sample from the grid using given probabilities
sam <- sample(1:nrow(xy), size = 5, prob=prob) # Change size as required.
xy[sam,] # Thse are your (**MY!**) 5 samples
x y
[1,] 4 4
[2,] 7 1
[3,] 3 2
[4,] 5 1
[5,] 5 3

要确认样本概率是正确的,您可以模拟许多样本并查看哪个坐标被采样最多。
snail.sam <- function(nsamples) {
sam <- sample(1:nrow(xy), size = nsamples, prob=prob)
apply(xy[sam,], 1, function(x) paste(x[1], x[2], sep=","))
}

SAMPLES <- replicate(10000, snail.sam(5))

tab <- table(SAMPLES)
cols <- colorRampPalette(c("lightblue", "darkblue"))(max(tab))
barplot(table(SAMPLES), horiz=TRUE, las=1, cex.names=0.5,
col=cols[tab])

enter image description here

如果使用 100 x 100 网格并且站点位于坐标 (60,70),则图像将如下所示,采样网格显示为黑点:

enter image description here

这些点趋向于靠近站点,尽管采样可变性可能使其难以看到。如果你想给甚至 更多 权重到车站附近的网格,然后你可以重新调整概率,我认为这是可以做到的,以节省旅行成本,但在估计整个地区的蜗牛数量时,需要将这些权重纳入分析。在这里,我对概率进行了三次计算,这样您就可以看到会发生什么。
sam <- sample(1:nrow(xy), size = 200, prob=prob^3)

enter image description here

这些点位于车站附近的趋势现在更加明显。

关于R:为靠近指定位置的单元格采样矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60471975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com