2017-01-07 9 views
1

Я не уверен в справедливости анализа точечного шаблона. Я пытаюсь использовать неоднородную функцию L-поперечного сечения с симуляционными оболочками для проверки пространственной ассоциации между двумя типами точек. График огибающей моделирования по сравнению с наблюдаемыми значениями данных кажется нечетным (чрезвычайно сильные моделируемые значения), и он предполагает ингибирование, а не кластеризацию (я бы ожидал, что кластеризация будет выглядеть на графике точечного рисунка).Spatstat: Неоднородный Lcross приводит к странному сюжету, несмотря на неоднородный точечный рисунок в соответствии с критериями подсчета квадратов

У меня есть точечный рисунок, содержащий деревья и рассаду на участке площадью 150 кв. М (5 х 10 м). Координаты для четырех углов графика содержатся в 4-м и 5-м столбцах данных.

данных:

Species  UTM.E  UTM.N  Plot.UTM.E Plot.UTM.N 
tree  4002027.599 5501253.964 4002024.175 5501253.558 
tree  4002027.599 5501254.66 4002033.956 5501251.478 
tree  4002028.536 5501254.592 4002027.293 5501268.23 
tree  4002032.155 5501252.43 4002037.075 5501266.151 
tree  4002033.586 5501253.409  
tree  4002033.692 5501253.512  
tree  4002033.1 5501253.958  
tree  4002032.485 5501264.136  
tree  4002032.144 5501264.748  
tree  4002030.003 5501264.156  
tree  4002030.241 5501266.473  
tree  4002029.094 5501267.435  
tree  4002028.704 5501265.775  
seedling 4002030.41 5501252.891  
seedling 4002030.412 5501252.9  
seedling 4002030.83 5501252.977  
seedling 4002029.896 5501252.863  
seedling 4002029.745 5501253.161  
seedling 4002028.376 5501252.949  
seedling 4002028.681 5501252.579  
seedling 4002028.374 5501252.339  
seedling 4002028.09 5501254.159  
seedling 4002026.928 5501255.562  
seedling 4002026.557 5501255.224  
seedling 4002026.815 5501255.986  
seedling 4002025.22 5501255.444  
seedling 4002024.608 5501254.13  
seedling 4002025.102 5501254.298  
seedling 4002025.482 5501254.06  
seedling 4002025.081 5501254.004  
seedling 4002025.1 5501253.905  
seedling 4002024.644 5501253.774  
seedling 4002026.475 5501256.743  
seedling 4002026.158 5501256.234  
seedling 4002028.481 5501258.382  
seedling 4002028.995 5501257.457  
seedling 4002029.313 5501257.7  
seedling 4002029.4 5501256.325  
seedling 4002029.378 5501255.91  
seedling 4002029.518 5501256.314  
seedling 4002028.519 5501256.774  
seedling 4002028.495 5501256.468  
seedling 4002030.388 5501256.809  
seedling 4002030.701 5501256.626  
seedling 4002029.037 5501260.088  
seedling 4002027.834 5501262.373  
seedling 4002028.002 5501262.844  
seedling 4002028.299 5501262.517  
seedling 4002028.186 5501262.239  
seedling 4002028.735 5501262.656  
seedling 4002028.93 5501262.677  
seedling 4002029.239 5501263.083  
seedling 4002029.744 5501263.277  
seedling 4002029.095 5501263.152  
seedling 4002028.777 5501265.856  
seedling 4002030.527 5501266.125  
seedling 4002031.215 5501266.118  
seedling 4002031.316 5501264.917  
seedling 4002031.027 5501262.104  
seedling 4002032.464 5501263.263  
seedling 4002032.824 5501262.688  
seedling 4002032.394 5501254.205  
seedling 4002032.394 5501254.192  
seedling 4002033.091 5501253.509  
seedling 4002031.179 5501254.413  
seedling 4002031.094 5501253.614  
seedling 4002031.084 5501253.45  
seedling 4002030.944 5501253.069  

Я заинтересован в тестировании пространственной ассоциации среди деревьев и саженцев с использованием L-функции интертипные (LCROSS). Перед тестированием, я проверил на однородность точечного процесса с использованием графов QUADRAT:

library(spatstat) 

#setwd and read file 
setwd() 
file <- read.csv("tree seeds example.csv",header=TRUE) 

#create marked point process with window bounded by plot corners 
#window 
x <- file$Plot.UTM.E[1:4] 
y <- file$Plot.UTM.N[1:4] 
w <- owin(poly=list(x=c(x[4],x[3],x[1],x[2]),y=c(y[4],y[3],y[1],y[2]))) 

#create point process with coordinates for each point and marks for trees vs. seedlings 
points <- ppp(file$UTM.E,file$UTM.N,w,marks=file$Species) 

#get window edges 
e <- edges(w) 

#rotate window to 90 degrees (thanks E. Rubak) 
a<- angles.psp(e) 
points.rotate <- rotate(points, -a[1]) 

#examine point pattern 
plot(points.rotate) 

#do quadrat count test and report p-value 
M <- quadrat.test(points.rotate,nx=3,ny=3) 
p <- M$p.value 
p # extremely small p-value rejects null hypothesis of homogeneity 

Потому что я нахожу эту модель точки появляется неоднородным (как визуально, так и с помощью подсчета QUADRAT), я решил использовать функцию неоднородной «LCROSS» с имитационными огибающими для проверки пространственной связи между деревьями и сеянцами.

Я буду исследовать только 1, 2, 3 и 4 метра, потому что у меня есть небольшой размер участка. Я запускаю 999 симуляций, визуально проверяю полученный результат и вычисляю p-значение для двухстороннего теста с использованием методов из Baddeley et al. 2014.

 #set vector of lag distances to examine for spatial association 
     r.vec <- c(0,1,2,3,4) #meters 

     #inhomogeneous Lcross function because q test supports inhomogeneity 
     inhom <- envelope(points,fun=Lcross.inhom,r=r.vec,funargs=list("tree","seedling"), 
nsim=999,correction="isotropic",savefuns=TRUE) 
     plot(inhom) 

     #get p-val for 4 m lag, according to Baddeley et al. 2014 "On tests of 
     #spatial patterns based on simulation envelopes" 
     #equation for two-sided test: "2*min(j+1,m+1-j)/(m+1) 

     m <- 999 # number of sims 
     obs <- inhom$obs[5] #observed value for lag 5 
     sims <- attr(inhom,"simfuns") # get simulation values 
     lag5sims <- sims[5,] #get simulation values only for lag 5 
     lag5sims <- as.matrix(lag5sims) #change to matrix 
     lag5sims <- lag5sims[,2:1000] #drop first r value 
     j <- sum(lag5sims>obs) 

     2*min(j+1,m+1-j)/(m+1) # get result of significant inhibition (because j is large) 

Высокое значение вычисленного моделирования огибающей чрезвычайно велико, а сюжет просто не смотрит прямо на меня. Кроме того, я нахожу значительную отрицательную пространственную ассоциацию на расстоянии 4 метра с использованием методов от Baddeley et al. 2014. НО, глядя на график точечного рисунка, кажется, что на 4 метра может быть положительная пространственная связь между рассадой и деревьями или, по крайней мере, не экстремальная отрицательная связь. Когда я запускаю тот же код, используя гомогенную функцию Lcross, я на самом деле нахожу значительную положительную связь на расстоянии 4 метров.

Large simulation envelope using the inhomogeneous Lcross function

Visually, it seems like there should be positive association at higher lag distances

Является ли использование неоднородной LCROSS функции несоответствующей здесь, или я использую это неправильно?

Большое спасибо за то, что нашли время, чтобы прочитать длинный вопрос и любую помощь.

ответ

1

Проблема с примером кода является то, что, если X это шаблон точки, envelope(X, .....) выполняет проверку полной хаотичности.

Для проверки кластеризации/торможения при наличии пространственной неоднородности нулевой гипотезой должен быть неоднородный пуассоновский процесс. Вам нужно будет каким-то образом оценить неоднородные функции интенсивности двух типов точек, а затем сформировать моделированные точечные узоры в соответствии с этими интенсивностями. Вот два способа (если X является ваш шаблон точка):

  1. Kernel Сглаживание: Сначала оценить интенсивность каждого типа точки в исходных данных по D <- density(split(X)). Модифицированная реализация из нулевой гипотезы теперь может быть сгенерирована Y <- rmpoispp(D, types=names(D)). Мы хотим, чтобы это произошло в команде envelope, поэтому просто сделайте

    envelope(X, Lcross.inhom, simulate=expression(rmpoispp(D, types=names(D)))).
    Аргумент simulate указывает, что это выражение должно быть оценено для генерации каждого смоделированного шаблона точки.

  2. Использование модели: Сначала примените модель процесса Пуассона к наблюдаемым данным, например. fit <- ppm(X ~ polynom(x,y,3)). Затем выполните

    envelope(fit, Lcross.inhom, lambdaX=fit).

    Поскольку первый аргумент является объектом ppm, обрабатывается envelope.ppm. Это приведет к созданию имитируемых реализаций из установленной модели Пуассона и будет вычислять неоднородные L-поперечные функции от каждой реализации. Аргумент lambdaX передан Kcross.inhom; см. ?Kcross.inhom для объяснения того, как это интерпретируется.

Подробнее см. В главе 10 от the spatstat book.

0

Только короткий ответ, так как в моем часовом поясе.

Вы не используете модель неоднородной нулевой модели для имитации. Вы просто имитируя два независимых однородных Пуассона процессов (один для деревьев и один для рассады) в соответствии с документацией envelope.ppp:

Если Y представляет собой шаблон точка (объект класса «ррр») и имитации = NULL, , то мы генерируем nsim-моделирование полной пространственной случайности (т. Е. nsim смоделированные точечные шаблоны, каждый из которых является реализацией однородного точечного процесса Пуассона) с той же интенсивностью, что и шаблон Y.(Если Y это шаблон точки многотипной, то моделируемые узоры также данные независимые случайные знаки; распределение вероятностей случайных знаков определяются относительными частотами знаков в Y.)

Вы можете сохранить смоделированные модели в envelope.ppp, добавив аргумент savepatterns = TRUE, а затем вы можете извлечь их

pat <- attr(inhom, "simpatterns") 

Если участок (часть) их по plot(as.solist(pat[1:9]) вы видите они однородны и не похожи исходный рисунок, поэтому ониlso приводят к очень различным функциям Lcross.inhom. Один из способов исправить это - подогнать модель к данным с помощью ppm и запустить envelope на установленной модели (отправлено на envelope.ppm). У вас очень мало баллов в целом и, в частности, очень мало деревьев, поэтому оценка интенсивности деревьев очень неопределенная и, вероятно, чувствительна к используемой полосе пропускания. Вы действительно должны быть осторожны, что вы здесь делаете ...

+0

Благодарим вас за быстрый и подробный ответ. Что касается вашей озабоченности по поводу небольшого числа точек в шаблоне и неопределенности оценки интенсивности, следует ли методология, изложенная @AdrianBaddeley выше, решить эти проблемы, или есть другие соображения, которые следует учитывать для чувствительности к полосе пропускания? – Birch14

+0

Вы не можете сделать ничего лучше, чем предлагает @AdrianBaddeley.При использовании подхода «ppm» у вас нет проблемы с выбором полосы пропускания, но тогда у вас есть произвольная линейно-линейная модель, с которой вам будет комфортно. При полностью непараметрическом подходе я уверен, что вы увидите огромные различия, если вы добавите, например, 'sigma = bw.scott' для вызова конверта (аргумент передается' Linhom'). Даже начальные графики сюжета (Lcross.inhom (points)) 'и' plot (Lcross.inhom (points, sigma = bw.scott)) показывают четкие различия (хотя и не огромные). –

+0

Здравствуйте, еще раз - спасибо за ответ. К сожалению, у меня возникла проблема с выполнением кода из метода @ AdrianBaddeley. Используя те же данные примера выше, я побежал: 'fit <- ppm (points ~ polymom (x, y, 3))'. Работали, хотя коэффициенты для полиномиальных членов возвращаются 'NA'. Затем я попытался использовать линию конверта, как написано выше 'envelope (fit, Lcross.inhom, lambdaX = fit)'. Вывод был следующим: 'Ошибка в файле solve.default (M): Локальная процедура dgesv: система точно сингулярна: U [1,1] = 0 Ошибка в файле solve.default (M):' .... – Birch14