Спасибо за наглядный воспроизводимый пример. Я могу подтвердить, что я тоже получаю ошибку. Просто уточняющий вопрос: изменилось ли поведение 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
. Это , а не , обязательно лучший способ решения этой проблемы в целом, но в вашем случае это, скорее всего, приведет к очень небольшому смещению.