Проблема с тестами Goodness-Of-Fit для объектов класса kppm в spatstat версии 1.61-0 - PullRequest
0 голосов
/ 07 октября 2019

Я использую разные тесты Goodness of fit для объектов класса kppm. Хорошие тесты соответствия в прилагаемом коде работали нормально в версии 1.59-0 spatstat, но в самой последней версии (1.61-0 и 1.61-0.019) есть ошибка, связанная с rinterval.

Код с семенами для репликации ошибки:

library(spatstat)

#### Seed to recreate the same results ####
set.seed(1234)
#### Model from Thomas process ####
Data.Example <- rThomas(5, 0.05, 10) # kappa, scale, mu

#### Fitting a Thomas model ####
DE.fit.Thomaskppm <- kppm(Data.Example, ~ 1, "Thomas")

#*********************************************************
#### Goodness-of-fit test                             ####
#*********************************************************
####Using Dao-Genton test ####

#Thomas model
set.seed(100000)
dg.test(DE.fit.Thomaskppm, rinterval = c(0, 0.25))

#### Diggle-Cressie-Loosmore-Ford test ####

#Thomas model
set.seed(100000)
dclf.test(DE.fit.Thomaskppm, rinterval = c(0, 0.2))

#### Maximum Absolute Deviation Tests ####

#Thomas model
set.seed(100000)
mad.test(DE.fit.Thomaskppm, rinterval = c(0, 0.2))

Ошибка:

 Error in envelopeTest(Yi, ..., nsim = nsimsub, alternative = alternative,  : 
  Some function values were infinite, NA or NaN at distances r up to 0.25 units. Please specify a shorter ‘rinterval’ 

Эта ошибка появилась в версии 1.59-0, но была исправлена ​​установкой rinterval от 0 до 0,25. В версии 1.61-0 я установил rinterval еще короче, но эта ошибка продолжает появляться.

dclf.test и mad.test работают нормально, если я использую 10 в качестве начального числа.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 октября 2019

Спасибо за наглядный воспроизводимый пример. Я могу подтвердить, что я тоже получаю ошибку. Просто уточняющий вопрос: изменилось ли поведение spatstat с 1.59-0 на 1.61-0 с тем же начальным числом?

Я очень уверен, что у меня есть объяснение, почему возникает ошибка, но я неуверен, что лучший способ решить это. Я постараюсь вернуться к вам с этой стороны. Теперь для объяснения:

Ваша модель имеет родительскую интенсивность 3,78. Модель моделируется в расширенном окне, а затем ограничивается целевым окном (единичный квадрат). Коэффициент расширения равен 4*scale, где у вашей подогнанной модели scale=0.05 (округлено). Таким образом, окно симуляции имеет площадь (1+8*scale)^2=1.9, а ожидаемое количество родительских точек - 3.78*1.9=7.2. Число родителей, распределенное по Пуассону, может иногда быть равно нулю, что дает приблизительную K-функцию, которая везде NA, поэтому изменение rinterval не поможет. K-функция NA также может произойти, если в расширенном регионе у вас есть только один или два родителя, у которых нет потомков в окне целевой симуляции. В совокупности вероятность появления пустого точечного шаблона в целевом окне не является ничтожной.

Я подумаю, как наилучшим образом обойти эту проблему без аннулирования статистического вывода.

Код ниже иллюстрирует проблему(начиная с исходного кода из вопроса)

library(spatstat)

#### Seed to recreate the same results ####
set.seed(1234)
#### Model from Thomas process ####
Data.Example <- rThomas(5, 0.05, 10) # kappa, scale, mu

#### Fitting a Thomas model ####
DE.fit.Thomaskppm <- kppm(Data.Example, ~ 1, "Thomas")

Симулируйте подобранную модель и извлеките количество точек:

s <- simulate(DE.fit.Thomaskppm, nsim = 1000, verbose = FALSE)
np <- sapply(s, npoints)
summary(np)
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>    0.00   30.00   45.00   47.52   63.00  167.00

Найдите соотношение образцов с 1 или менее точками, дающимичистая NA оценка K-функции:

mean(np<=1)
#> [1] 0.016

Простой обходной путь - сначала моделировать шаблоны, как показано выше, а затем удалять шаблоны с менее чем двумя точками и моделировать новые. Если у вас есть список имитируемых шаблонов необходимой длины, вы можете предоставить этот список в качестве аргумента simulate для envelope. Это , а не , обязательно лучший способ решения этой проблемы в целом, но в вашем случае это, скорее всего, приведет к очень небольшому смещению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...