Я хочу использовать реплицированные пространственные точечные шаблоны для проверки гипотез в spatstat
. spatstat
имеет замечательную документацию, и вы можете найти подробную информацию об анализе реплицированных точечных шаблонов здесь: https://cran.r-project.org/web/packages/spatstat/vignettes/replicated.pdf
Несколько нанесенных на карту участков леса будут представлять собой точечный процесс, работающий в разных местах. Отмечен каждый точечный образец, где каждая отметка представляет собой древесную породу. Кроме того, каждый точечный узор связан с ковариативным растровым изображением. Во-первых, я хочу создать нулевую модель, которая предполагает, что каждая метка имеет разные отношения с ковариатой. Затем я хочу использовать эту нулевую модель, чтобы проверить, связаны ли определенные виды (или избегают) друг друга, путем моделирования гипотезы случайной маркировки и построения результирующих огибающих моделирования. (Гипотеза случайной маркировки утверждает, что метки случайным образом присваиваются точкам в точечном шаблоне.)
Во-первых, я покажу, как я обычно выполняю этот анализ, используя одноточечный шаблон. Затем я объясню две проблемы, которые возникают у меня при использовании гиперкадров для выполнения того же анализа.
Допустим, у вас есть отмеченный точечный узор, где каждая отметка - это порода дерева. Я буду использовать набор данных "lansing", доступный в spatstat:
library(spatstat)
data(lansing)
par(mar=rep(0.5,4))
plot(split(lansing),main="")
Теперь предположим, что вы хотите посмотреть на некоторую пространственную ковариату (например, питательные вещества почвы или влажность), поэтому вы создаете растровое изображение сглаженной ядра плотности измерения:
sim1 <- rpoispp(function(x,y) {500 * exp(-3*x)}, win=owin(c(0,1),c(0,1)))
sim1 <- density(sim1)
Сначала создайте нулевую модель:
single.mod <- ppm(lansing ~ marks*sim1)
Где функция «ppm» распознает «mark» как столбец с названиями видов, а «sim1» как ковариату.
Затем выполните проверку гипотез на основе моделирования, где вас интересует, находятся ли Black Oak и Maple в одних и тех же местах.
single.E<-envelope.ppm(single.mod,Lcross,i="blackoak",j="maple",nsim=39, nrank=1,global=TRUE,correction="best",simulate=expression(rlabel(lansing)))
par(mar=rep(4,4))
plot(E,legend=FALSE,ylab="L-function",xlab="Spatial scale (m)",main="Testing random label hypothesis \nfor single point pattern")
Это прекрасно работает. Теперь, если мы выйдем и выберем еще пару графиков, чтобы сделать наш анализ более надежным, мы сможем включить дополнительные графики в гиперфрейм, где каждый график имеет свой собственный точечный образец и считается «экспериментальным» повторением. У каждого графика также будет своя пространственная ковариата:
sim2 <- rpoispp(function(x,y) {500 * exp(-2*y)}, win=owin(c(0,1),c(0,1)))
sim2 <- density(sim2)
sim3 <- rpoispp(500, win=owin(c(0,1),c(0,1)))
sim3 <- density(sim3)
hyper <- hyperframe(pp=list(lansing,lansing,lansing),sims=list(sim1,sim2,sim3))
Sim2 и sim3 - это пространственные ковариаты для двух дополнительных графиков, которые мы собрали, а функция «гиперкадр» объединяет три точечных шаблона с соответствующими пространственными ковариатами в один гиперкадр.
Я хотел бы построить модель с использованием "mppm" (используется для создания моделей для нескольких точечных шаблонов), где каждый точечный шаблон объясняется их пространственными ковариатами, "sims":
hyper.mod <- mppm(pp ~ sims, data = hyper)
Первая проблема возникает, когда я пытаюсь позволить каждой метке иметь разные отношения с ковариатой:
int.mod <- mppm(pp ~ marks*sims, data=hyper)
Выдается следующее сообщение об ошибке:
Ошибка в контрольных переменных (формула, data.sumry $ col.names, extra = c ("x", "y",: переменная "mark" в формуле не является одним из имен в данных "
Я получаю ту же ошибку, используя:
int.mod <- mppm(pp ~ pp$marks*sims, data=hyper)
Вторая проблема - выяснить, как запустить проверку гипотезы на основе моделирования на гиперкадре. Давайте воспользуемся сработавшей моделью гиперкадра (hyper.mod), чтобы попробовать это:
E.hyper <- envelope(hyper.mod,Lcross,i="blackoak",j="maple",nsim=39, nrank=1,global=TRUE,correction="best",simulate=expression(rlabel(pp)))
Вы получаете сообщение об ошибке:
Ошибка в UseMethod ("envelope"): нет применимого метода для "envelope", примененного к объекту класса "c ('mppm', 'list')"
Подразумевая, что "конверт" не работает с объектами mppm (только ppp или ppm). Я подозреваю, что есть способ обойти это ограничение с умом, но я его еще не нашел. Любые предложения или рекомендации были бы очень полезны!