2016-03-09 2 views
0

Я пытаюсь получить среднее значение меток в каждой точке, считая все точки, доступные на определенном расстоянии вокруг каждой точки, и включая точку, из которой мы измеряем.Среднее значение оценок ближайших соседей markmean

Я использовал markmean() {pulstats} с буфером, но я не уверен, что он делает то, что я хочу делать.

Вот простой пример того, что я пытаюсь сделать:

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 Конечно мои реальные данные не следовать шаблону регулярного, так расстояние между точками является переменным.

Я ожидал бы, что для точки 13 с сигмой 1 значение markmean равно: (60 + 40 + 0 + 0 + 0)/5 = 20 или для точки 7 обозначение означает: (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 

вы знаете, почему я получаю эти результаты? Как вы правильно вычислили среднее значение меток вокруг каждой точки в определенном буфере?

Большое спасибо за ваше время и помощь!

ответ

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 
+0

Большое спасибо за ваш вклад! Именно то, что я искал. – YDO

Смежные вопросы