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 )

空间点看起来像这样:

带有 ID 和标记的点分布(标记在点 13=60,在点 14=40,其余点标记为 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

你知道我为什么会得到这些结果吗?您将如何正确计算某个缓冲区内每个点周围标记的平均值?

非常感谢您的时间和帮助!

4

1 回答 1

0

该函数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
于 2016-03-09T17:32:44.807 回答