我试图从我的数据的G函数拟合到以下数学模式:y = A /((1 +(B^2)*(x^2))^((C + 1)/ 2))。该图的形状可以在这里看到:R非线性最小二乘法(nls)模型拟合
这里有一个基本的例子就是我一直在做:
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)
“葛思德”是“spatstat”内发现的功能图书馆。它是G函数或最近邻函数,它显示独立轴上粒子间的距离,以及在从属轴上寻找最近邻粒子的概率。因此,它从y = 0开始,并在y = 1时达到饱和点。
如果你绘制simdat.Gest,你会注意到曲线是's'形的,这意味着它从y = 0开始,到y = 1结束。因此,我认识了向量G值,这是因变量。因此,信息处于正确的方向以符合上述模型。
您可能还会注意到,我已经自动设置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选择合适的起始值而发生的。
我希望有人能帮我弄清楚第一个错误来自哪里。另外,选择起始值以避免第二个错误的最有效方法是什么?
谢谢!
当你键入'simdat.Gest < - 葛思德(SIMDAT)'你告诉我们你有一个名为'Gest'功能。但是你没有把它交给我们。我认为使用'rnorm'创建测试数据集并不难,尽管理想情况下我们会给出前20行,但我们确实需要知道'Gest'正在做什么。 –
您在该公式中使用的公式名称('G值')不同于data.frame('G')中使用的 –
这是我的错误,我现在编辑了该帖子。 “Gest”是在“spatstat”库中找到的功能。 Gest是最近邻函数,它显示独立轴上粒子之间的距离,以及在从属轴上寻找最近邻粒子的概率。因此,它从y = 0开始,并在y = 1时达到饱和点。 – MikeZ