множественное сравнение с spatstat

Я использую пространственную модель, используя spatstat. После подбора модели я хотел бы сравнить прогнозы на нескольких расстояниях и сказать, существенно ли они отличаются друг от друга. В основе набора данных у меня есть несколько точек вокруг 0, 0 начала координат. Каждая точка имеет координаты x, y, расстояние от начала координат и кардинальный угол (север / восток / запад / юг).

Следуя настройке из ответа на этот вопрос:

library(spatstat)
library(ggplot2)

# making up some data
set.seed(42)
X <- runifdisc(2000)
plot(X)
W <- Window(X)

rad <- as.im(function(x,y){sqrt(x^2+y^2)}, W)
ang <- as.im(atan2, W)
plot(solist(rad, ang), main = "")

# assigning directions
north <- ang < 45/180*pi & ang > -45/180*pi
east <- ang > 45/180*pi & ang < 135/180*pi
west <- ang < -45/180*pi & ang > -135/180*pi
south <- ang < -135/180*pi | ang > 135/180*pi
# create and run a model
lam <- 2000*exp(-2*rad - rad*north - 3*rad*west)
set.seed(42)
X2 <- rpoispp(lam)[W]

mod2 <- ppm(X2 ~ rad*west + rad*south +rad*east)
plot(predict(mod2))
plot(X2, add = TRUE, col = rgb(.9,.9,.9,.5))

Сделайте прогноз по сетке для точек севера и запада.

preds1 <- data.frame(Angle = "North", x = 0, y = seq(0.1, 1, 0.1))
preds2 <- data.frame(Angle = "West", y = 0, x = seq(-1, -0.1, 0.1)) 

preds <- rbind(preds1, preds2)
preds$Pred <- predict(mod2, locations = preds)
temp <- predict(mod2, locations = preds, interval = "confidence")
preds$Lower <- temp[1:nrow(preds)]
preds$Upper <- temp[(nrow(preds) + 1) : length(temp)]
preds$Distance <- ifelse(preds$x == 0, abs(preds$y), abs(preds$x))

ggplot(preds) +
   geom_ribbon(aes(x = Distance, ymin = Lower, ymax = Upper, group = Angle), alpha = 0.1) +
   geom_line(aes(x = Distance, y = Pred, colour = Angle), size = 0.75) 

В качестве следующего шага я хочу сказать, что значения севера и запада существенно различаются на расстояниях x, y, z, но не a, b, c ... Как мне туда добраться?


person user2602640    schedule 22.01.2019    source источник
comment
Правильно ли я понял вопрос: вы хотите сказать, что они разные в прим. диапазон [0.12,1], но не в [0,0.12)? То есть цель состоит в том, чтобы определить, где доверительные интервалы перекрываются, а где нет?   -  person Julius Vainora    schedule 04.02.2019
comment
Ага, похоже, правильно.   -  person user2602640    schedule 04.02.2019
comment
Глядя на определенные расстояния (0,1, 0,2, ...), только 0,1 не будет существенно отличаться. Это все, что тебе нужно? Или вы хотите интерполировать результаты, чтобы получить интервал, как в моем предыдущем комментарии, [0,12]?   -  person Julius Vainora    schedule 04.02.2019
comment
Этот пример представляет собой игрушечный набор данных - я ищу общее решение, которое я могу применить к своим собственным данным. Надо было бы посмотреть, чем интерполированные результаты отличаются от точечных, не совсем могу это представить. На мой взгляд, я смотрю на плотность, поэтому точечные сравнения имеют для меня смысл, но мне было бы очень любопытно увидеть оба подхода.   -  person user2602640    schedule 04.02.2019
comment
При удаче? Вы возлагали мои надежды :-)   -  person user2602640    schedule 06.02.2019
comment
Точечный вариант прост: например, мы можем сначала упорядочить данные с помощью preds <- preds[order(preds$Angle, preds$Distance), ], а затем использовать preds$Distance[1:10][head(preds$Lower, 10) < tail(preds$Upper, 10)]. Я не писал ответа, так как интерполированная версия будет более сложной. Первый шаг - найти, где пересекаются нижний / верхний пределы. Проблема в том, что, я думаю, Север не всегда выше Запада. Так что это потребует большей осторожности. В вашем примере мы можем использовать rootSolve, чтобы найти несколько корней функции f = f1-f2, где ...   -  person Julius Vainora    schedule 06.02.2019
comment
..._ 1_ и f2 <- approxfun(preds$Distance[11:20], preds$Upper[11:20]). Затем multiroot(function(x) fun1(x) - fun2(x), start = 0.1) находит 0,1909556 как корень, и ответ будет [0,1909].   -  person Julius Vainora    schedule 06.02.2019
comment
Предлагаю четко объяснить в своем ответе, что вы хотите, чтобы помочь людям не тратить время зря. И подумать, подходящее ли это место, чтобы задать свой вопрос: методологический это или о программировании?   -  person Julius Vainora    schedule 09.02.2019
comment
Второе предложение в моем вопросе было: я хотел бы сравнить прогнозы на нескольких расстояниях и сказать, существенно ли они отличаются друг от друга. Чего я и хочу. Мне жаль, что это оказалось пустой тратой вашего времени. Я думаю, что это вопрос программирования - мне нужно решение, подобное emmeans, но для пространственных моделей, когда это становится проблемой приложения.   -  person user2602640    schedule 09.02.2019