spatstat 版本 1.61-0 中 class kppm 对象的拟合优度测试问题
Problem with Goodness-Of-Fit tests for objects of class kppm in spatstat version 1.61-0
我正在对 class kppm 的对象使用不同的拟合优度测试。附加代码中的拟合优度在 spatstat 1.59-0 版本中运行良好,但在最新版本(1.61-0 和 1.61-0.019)中,存在与 rinterval
.[=18 相关的错误=]
复制错误的带有种子的代码是:
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
设置得更短,但仍然出现此错误。
如果我使用 10 作为种子,dclf.test
和 mad.test
工作正常。
提前致谢。
感谢您提供清晰的可重现示例。我可以确认我也收到了错误。只是一个澄清的问题:使用相同的种子,行为是否从 spatstat 1.59-0 更改为 1.61-0?
我非常有信心我能解释错误发生的原因,但我不确定解决它的最佳方法是什么。我会尽力就那部分回复你。现在进行解释:
您的模型 parent 强度为 3.78。该模型在扩展window中模拟,然后限制在目标window(单位正方形)。扩展因子为 4*scale
,其中您的拟合模型具有 scale=0.05
(四舍五入)。因此模拟的 window 有面积 (1+8*scale)^2=1.9
并且预期的 parent 点数是 3.78*1.9=7.2
。 parent 的泊松分布数有时可能为零,这会为您提供估计的 K-function,即到处都是 NA
,因此更改 rinterval
无济于事。 NA
K-function 也可能发生,如果你在扩展区域中只有一两个 parent 并且在目标模拟 window 中没有后代。总体而言,目标 window 中空点模式的概率为 non-negligible.
我会考虑如何在不使统计推断无效的情况下最好地规避这个问题。
下面的代码说明了问题(从问题的原始代码开始)
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
找出产生纯 NA
K-function 估计的 1 点或更少点的模式比例:
mean(np<=1)
#> [1] 0.016
一个简单的解决方法是先模拟如上图所示的模式,然后删除少于两个点的模式并模拟新的模式。获得所需长度的模拟模式列表后,您可以将此列表作为 envelope
的 simulate
参数提供。这不是通常处理此问题的最佳方法,但在您的情况下,它很可能会引入很少的偏差。
我正在对 class kppm 的对象使用不同的拟合优度测试。附加代码中的拟合优度在 spatstat 1.59-0 版本中运行良好,但在最新版本(1.61-0 和 1.61-0.019)中,存在与 rinterval
.[=18 相关的错误=]
复制错误的带有种子的代码是:
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
工作正常。
提前致谢。
感谢您提供清晰的可重现示例。我可以确认我也收到了错误。只是一个澄清的问题:使用相同的种子,行为是否从 spatstat 1.59-0 更改为 1.61-0?
我非常有信心我能解释错误发生的原因,但我不确定解决它的最佳方法是什么。我会尽力就那部分回复你。现在进行解释:
您的模型 parent 强度为 3.78。该模型在扩展window中模拟,然后限制在目标window(单位正方形)。扩展因子为 4*scale
,其中您的拟合模型具有 scale=0.05
(四舍五入)。因此模拟的 window 有面积 (1+8*scale)^2=1.9
并且预期的 parent 点数是 3.78*1.9=7.2
。 parent 的泊松分布数有时可能为零,这会为您提供估计的 K-function,即到处都是 NA
,因此更改 rinterval
无济于事。 NA
K-function 也可能发生,如果你在扩展区域中只有一两个 parent 并且在目标模拟 window 中没有后代。总体而言,目标 window 中空点模式的概率为 non-negligible.
我会考虑如何在不使统计推断无效的情况下最好地规避这个问题。
下面的代码说明了问题(从问题的原始代码开始)
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
找出产生纯 NA
K-function 估计的 1 点或更少点的模式比例:
mean(np<=1)
#> [1] 0.016
一个简单的解决方法是先模拟如上图所示的模式,然后删除少于两个点的模式并模拟新的模式。获得所需长度的模拟模式列表后,您可以将此列表作为 envelope
的 simulate
参数提供。这不是通常处理此问题的最佳方法,但在您的情况下,它很可能会引入很少的偏差。