我正在尝试将数据的 G 函数中的信息拟合到以下数学模式: y = A / ((1 + (B^2)*(x^2))^((C+1)/2 ))。该图的形状可以在这里看到:
这是我一直在做的一个基本示例:
data(simdat)
library(spatstat)
simdat.Gest <- Gest(simdat) #Gest is a function within spatstat (explained below)
Gvalues <- simdat.Gest$rs
Rvalues <- simdat.Gest$r
GvsR_dataframe <- data.frame(R = Rvalues, G = rev(Gvalues))
themodel <- nls(rev(Gvalues) ~ (1 / (1 + (B^2)*(R^2))^((C+1)/2)), data = GvsR_dataframe, start = list(B=0.1, C=0.1), trace = FALSE)
“Gest”是“spatstat”库中的一个函数。它是 G 函数或最近邻函数,它显示了独立轴上粒子之间的距离,以及在从属轴上找到最近邻粒子的概率。因此,它从 y=0 开始并在 y=1 处达到饱和点。
如果您绘制 simdat.Gest,您会注意到曲线是“s”形的,这意味着它从 y = 0 开始并在 y = 1 结束。因此,我反转了向量 Gvalues,它是依赖的变量。因此,信息处于适合上述模型的正确方向。
您可能还注意到我已经自动设置了 A = 1。这是因为 G(r) 总是在 1 处饱和,所以我没有费心将它保留在公式中。
我的问题是我不断收到错误。对于上面的示例,我收到此错误:
Error in nls(rev(Gvalues) ~ (1/(1 + (B^2) * (R^2))^((C + 1)/2)), data = GvsR_dataframe, :
singular gradient
我也遇到了这个错误:
Error in nls(Gvalues1 ~ (1/(1 + (B^2) * (x^2))^((C + 1)/2)), data = G_r_dataframe, :
step factor 0.000488281 reduced below 'minFactor' of 0.000976562
我不知道第一个错误来自哪里。然而,我认为第二个发生是因为我没有为 B 和 C 选择合适的起始值。
我希望有人可以帮助我找出第一个错误来自哪里。另外,选择起始值以避免第二个错误的最有效方法是什么?
谢谢!