0

I am using different Goodness of fit tests for objects of class kppm. The goodness of fit tests in the attached code worked fine in version 1.59-0 of spatstat, but in the most recent version (1.61-0 and 1.61-0.019), there is an error related to rinterval.

The code with seeds to replicate the error is:

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))

The error is:

 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’ 

This error appeared in version 1.59-0, but it was fixed by setting the rinterval from 0 to 0.25. In 1.61-0 version, I set the rinterval even shorter, but this error continues to appear.

dclf.test and mad.test work fine if I use 10 as the seed.

Thanks in advance.

4

1 回答 1

0

感谢您提供清晰可重复的示例。我可以确认我也收到了错误。只是一个澄清的问题:行为是否从 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。父母的泊松分布数量有时可能为零,这为您提供了NA无处不在的估计 K 函数,因此更改rinterval无济于事。NA如果您在扩展区域中只有一两个父母,而目标模拟窗口中没有后代,则也可能发生 K 函数。总体而言,目标窗口中空点模式的概率是不可忽略的。

我将考虑如何在不使统计推断无效的情况下最好地规避这个问题。

下面的代码说明了问题(从问题的原始代码开始)

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

求产生纯NAK 函数估计的点数为 1 或更少的模式的比例:

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

一个简单的解决方法是首先模拟上述模式,然后删除少于两点的模式并模拟新的模式。获得所需长度的模拟模式列表后,您可以将此列表作为simulate参数提供给envelope. 一般来说,这不一定是处理此问题的最佳方法,但在您的情况下,它很可能会引入很少的偏见。

于 2019-10-07T09:17:04.687 回答