データの 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 で終わることを意味します。変数。したがって、情報は上記のモデルに適合する正しい方向にあります。
また、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
最初のエラーがどこから来ているのか、私には手がかりがありません。しかし、2 つ目は、B と C に適切な開始値を選択しなかったために発生したと思います。
最初のエラーがどこから来たのかを誰かが見つけてくれることを願っていました。また、2 番目のエラーを回避するために開始値を選択する最も効果的な方法は何ですか?
ありがとう!