nls
上限に 2 つの当てはめパラメータを持つ 2 つの積分を含む、少し複雑な式に当てはめようとしています。
エラーが発生しました
"nlsModel(formula, mf, start, wts) のエラー: 初期パラメータ推定値での特異勾配行列".
以前の回答ですでに検索しましたが、役に立ちませんでした。パラメータの初期化は問題ないようです。パラメータを変更しようとしましたが、何も機能しません。関数に積分が 1 つしかない場合、すべてがうまく機能しますが、2 つ目の積分項を追加するとエラーが発生します。関数が過度にパラメータ化されているとは思いません。より多くのパラメータを使用して他の適合を実行し、それらが機能したためです。以下に、いくつかのデータを含むリストを書きました。
最小限の例は次のとおりです。
integrand <- function(X) {
return(X^4/(2*sinh(X/2))^2)
}
fitting = function(T1, T2, N, D, x){
int1 = integrate(integrand, lower=0, upper = T1)$value
int2 = integrate(integrand, lower=0, upper = T2)$value
return(N*(D/x)^2*(exp(D/x)/(1+exp(D/x))^2
)+(448.956*(x/T1)^3*int1)+(299.304*(x/T2)^3*int2))
}
fit = nls(y ~ fitting(T1, T2, N, D, x),
start=list(T1=400,T2=200,N=0.01,D=2))
------>参考までに、うまくいったフィットは次のとおりです。
integrand <- function(X) {
return(X^4/(2*sinh(X/2))^2)
}
fitting = function(T1, N, D, x){
int = integrate(integrand, lower=0, upper = T1)$value
return(N*(D/x)^2*(exp(D/x)/(1+exp(D/x))^2 )+(748.26)*(x/T1)^3*int)
}
fit = nls(y ~ fitting(T1 , N, D, x), start=list(T1=400,N=0.01,D=2))
------>問題を説明するデータ:
dat<- read.table(text="x y
0.38813 0.0198
0.79465 0.02206
1.40744 0.01676
1.81532 0.01538
2.23105 0.01513
2.64864 0.01547
3.05933 0.01706
3.47302 0.01852
3.88791 0.02074
4.26301 0.0256
4.67607 0.03028
5.08172 0.03507
5.48327 0.04283
5.88947 0.05017
6.2988 0.05953
6.7022 0.07185
7.10933 0.08598
7.51924 0.0998
7.92674 0.12022
8.3354 0.1423
8.7384 0.16382
9.14656 0.19114
9.55062 0.22218
9.95591 0.25542", header=TRUE)
何が起こるかわかりません。3 つの積分コンポーネントに対してこの近似を実行する必要がありますが、2 つでもこの問題があります。あなたの助けに感謝します。ありがとうございました。