最近邻居标记的平均值(空间点模式)markmean
mean of nearest neighbours marks (Spatial point pattern) markmean
我正在尝试获取每个点中标记的平均值,计算每个点周围一定距离处的所有可用点,并包括我们正在测量的点。
我已经将 markmean() {spatstats} 与缓冲区一起使用,但我不确定它是否在做我想做的事情。
这是我正在尝试做的一个简单示例:
library(spatstat)
p <- c(1:25) #points ID
x <- c(4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0) #x location
y <- c(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4) #y location
i <- c(0,0,0,0,0,0,0,0,0,0,0,0,60,40,0,0,0,0,0,0,0,0,0,0,0) #mark or value in each point
w <- owin(c(0,4), c(0,4))# window needed to create ppp
table <- data.frame(p,x,y,i)
ppptable.Mark <- ppp( table$x, table$y,
marks = table$i,
window = w )
meanmarkstable <- markmean (ppptable.Mark, sigma=1, at="points")
tableresults <- cbind(table,meanmarkstable )
空间点看起来像这样:
Point distribution with IDs and marks (marks are in point 13=60,in point 14=40, for the rest of the points the mark is 0
当然我的真实数据不遵循规则模式,所以点之间的距离是可变的。
我希望对于 sigma 1 的点 13,markmean 是:(60+40+0+0+0)/5= 20 或者对于点 7,markmean 是:(60+ 0+0+0+0)/5= 12.
但是按照上面的代码我得到:
p x y i meanmarkstable
1 1 4 0 0 0.5588339
2 2 4 1 0 1.8035799
3 3 4 2 0 3.3992581
4 4 4 3 0 3.2959390
5 5 4 4 0 2.1132312
6 6 3 0 0 1.6559496
7 7 3 1 0 5.5518658
8 8 3 2 0 10.5182801
9 9 3 3 0 10.1597853
10 10 3 4 0 6.2832065
11 11 2 0 0 2.5529727
12 12 2 1 0 8.6038936
13 13 2 2 60 4.7103612
14 14 2 3 40 7.6160733
15 15 2 4 0 10.0581368
16 16 1 0 0 1.6560550
17 17 1 1 0 5.5599181
18 18 1 2 0 10.6956613
19 19 1 3 0 11.0335128
20 20 1 4 0 7.7616822
21 21 0 0 0 0.5589243
22 22 0 1 0 1.8099875
23 23 0 2 0 3.5421055
24 24 0 3 0 4.0856978
25 25 0 4 0 2.1128894
你知道我为什么会得到这些结果吗?
您将如何正确计算特定缓冲区内每个点周围标记的平均值?
非常感谢您的宝贵时间和帮助!
函数markmean
计算您的点的数值标记的平滑空间平均值。我相信您正在寻找函数 markstat
来计算每个点邻域内的点的任何统计数据。该函数具有参数 X
(标记点模式)、fun
(要使用的汇总函数 - 在您的情况下为 mean
)和 N
(通过以下方式定义邻居N
离每个点最近的点)或 R
(通过每个点周围的半径定义邻居,这就是您想要的):
library(spatstat)
p <- 1:25 #points ID
x <- rep(4:0, each = 5) #x location
y <- rep(0:4, times = 5) #y location
i <- c(rep(0, 12), 60, 40, rep(0, 11)) #mark or value in each point
w <- square(4) # window needed to create ppp
table <- data.frame(p, x, y, i)
X <- with(table, ppp(x, y, marks = i, window = w))
meanmarkstable <- markstat (X, fun = mean, R=1)
tableresults <- cbind(table, neigh_mean = meanmarkstable)
然后 tableresults
包含以下内容:
p x y i neigh_mean
1 1 4 0 0 0
2 2 4 1 0 0
3 3 4 2 0 0
4 4 4 3 0 0
5 5 4 4 0 0
6 6 3 0 0 0
7 7 3 1 0 0
8 8 3 2 0 12
9 9 3 3 0 8
10 10 3 4 0 0
11 11 2 0 0 0
12 12 2 1 0 12
13 13 2 2 60 20
14 14 2 3 40 20
15 15 2 4 0 10
16 16 1 0 0 0
17 17 1 1 0 0
18 18 1 2 0 12
19 19 1 3 0 8
20 20 1 4 0 0
21 21 0 0 0 0
22 22 0 1 0 0
23 23 0 2 0 0
24 24 0 3 0 0
25 25 0 4 0 0
我正在尝试获取每个点中标记的平均值,计算每个点周围一定距离处的所有可用点,并包括我们正在测量的点。
我已经将 markmean() {spatstats} 与缓冲区一起使用,但我不确定它是否在做我想做的事情。
这是我正在尝试做的一个简单示例:
library(spatstat)
p <- c(1:25) #points ID
x <- c(4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,0,0,0,0) #x location
y <- c(0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4,0,1,2,3,4) #y location
i <- c(0,0,0,0,0,0,0,0,0,0,0,0,60,40,0,0,0,0,0,0,0,0,0,0,0) #mark or value in each point
w <- owin(c(0,4), c(0,4))# window needed to create ppp
table <- data.frame(p,x,y,i)
ppptable.Mark <- ppp( table$x, table$y,
marks = table$i,
window = w )
meanmarkstable <- markmean (ppptable.Mark, sigma=1, at="points")
tableresults <- cbind(table,meanmarkstable )
空间点看起来像这样:
Point distribution with IDs and marks (marks are in point 13=60,in point 14=40, for the rest of the points the mark is 0 当然我的真实数据不遵循规则模式,所以点之间的距离是可变的。
我希望对于 sigma 1 的点 13,markmean 是:(60+40+0+0+0)/5= 20 或者对于点 7,markmean 是:(60+ 0+0+0+0)/5= 12.
但是按照上面的代码我得到:
p x y i meanmarkstable
1 1 4 0 0 0.5588339
2 2 4 1 0 1.8035799
3 3 4 2 0 3.3992581
4 4 4 3 0 3.2959390
5 5 4 4 0 2.1132312
6 6 3 0 0 1.6559496
7 7 3 1 0 5.5518658
8 8 3 2 0 10.5182801
9 9 3 3 0 10.1597853
10 10 3 4 0 6.2832065
11 11 2 0 0 2.5529727
12 12 2 1 0 8.6038936
13 13 2 2 60 4.7103612
14 14 2 3 40 7.6160733
15 15 2 4 0 10.0581368
16 16 1 0 0 1.6560550
17 17 1 1 0 5.5599181
18 18 1 2 0 10.6956613
19 19 1 3 0 11.0335128
20 20 1 4 0 7.7616822
21 21 0 0 0 0.5589243
22 22 0 1 0 1.8099875
23 23 0 2 0 3.5421055
24 24 0 3 0 4.0856978
25 25 0 4 0 2.1128894
你知道我为什么会得到这些结果吗? 您将如何正确计算特定缓冲区内每个点周围标记的平均值?
非常感谢您的宝贵时间和帮助!
函数markmean
计算您的点的数值标记的平滑空间平均值。我相信您正在寻找函数 markstat
来计算每个点邻域内的点的任何统计数据。该函数具有参数 X
(标记点模式)、fun
(要使用的汇总函数 - 在您的情况下为 mean
)和 N
(通过以下方式定义邻居N
离每个点最近的点)或 R
(通过每个点周围的半径定义邻居,这就是您想要的):
library(spatstat)
p <- 1:25 #points ID
x <- rep(4:0, each = 5) #x location
y <- rep(0:4, times = 5) #y location
i <- c(rep(0, 12), 60, 40, rep(0, 11)) #mark or value in each point
w <- square(4) # window needed to create ppp
table <- data.frame(p, x, y, i)
X <- with(table, ppp(x, y, marks = i, window = w))
meanmarkstable <- markstat (X, fun = mean, R=1)
tableresults <- cbind(table, neigh_mean = meanmarkstable)
然后 tableresults
包含以下内容:
p x y i neigh_mean
1 1 4 0 0 0
2 2 4 1 0 0
3 3 4 2 0 0
4 4 4 3 0 0
5 5 4 4 0 0
6 6 3 0 0 0
7 7 3 1 0 0
8 8 3 2 0 12
9 9 3 3 0 8
10 10 3 4 0 0
11 11 2 0 0 0
12 12 2 1 0 12
13 13 2 2 60 20
14 14 2 3 40 20
15 15 2 4 0 10
16 16 1 0 0 0
17 17 1 1 0 0
18 18 1 2 0 12
19 19 1 3 0 8
20 20 1 4 0 0
21 21 0 0 0 0
22 22 0 1 0 0
23 23 0 2 0 0
24 24 0 3 0 0
25 25 0 4 0 0