首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spatstat版本1.61-0中kppm类对象的拟合优度测试问题

spatstat版本1.61-0中kppm类对象的拟合优度测试问题
EN

Stack Overflow用户
提问于 2019-10-07 01:02:35
回答 1查看 106关注 0票数 0

我正在用不同的适合度测试来测试kppm级的对象。附加代码中的拟合优度测试在spatstat版本1.590-0中运行良好,但在最近的版本(1.61-0和1.61-0.019)中,有一个与rinterval相关的错误。

带有种子来复制错误的代码是:

代码语言:javascript
复制
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))

错误是:

代码语言:javascript
复制
 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.590-0版本中,但通过将rinterval设置为0到0.25进行了修正。在1.61-0版本中,我将rinterval设置得更短,但是这个错误继续出现。

如果我使用10作为种子,dclf.testmad.test工作得很好。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-07 09:17:04

感谢您给出了一个清晰的可复制的例子。我可以确认我也得到了错误。只是一个澄清的问题:使用相同的种子,行为是否从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没有帮助。如果扩展区域中只有一个或两个在目标模拟窗口中没有后代的父本,则NA K-函数也可能发生。总的来说,目标窗口中出现空点模式的概率是不可忽略的。

我将考虑如何最好地避开这个问题,而不使统计推断失效。

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

代码语言:javascript
复制
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")

模拟拟合模型并提取点数:

代码语言:javascript
复制
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

找出有一个或更少点的模式的比例,得到一个纯NA K-函数估计:

代码语言:javascript
复制
mean(np<=1)
#> [1] 0.016

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58262441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档