[解決済み] 初期パラメータ推定時の特異勾配行列を防ぐための曲線の修正
2022-02-05 04:18:50
質問
を使いたいのですが
y=a^(b^x)
を使って、以下のデータに当てはめることができます。
y <- c(1.0385, 1.0195, 1.0176, 1.0100, 1.0090, 1.0079, 1.0068, 1.0099, 1.0038)
x <- c(3,4,5,6,7,8,9,10,11)
data <- data.frame(x,y)
非線形最小二乗法を使った場合。
f <- function(x,a,b) {a^(b^x)}
(m <- nls(y ~ f(x,a,b), data = data, start = c(a=1, b=0.5)))
と表示され、エラーが発生します。 初期パラメータ推定値における特異な勾配行列です。 結果はだいたいa=1.1466, b=0.6415で、初期パラメータ推定値はa=1, b=0.5と定義しているので問題ないはずです。
他のトピックで、カーブを修正すると便利というのを読んだことがあります。私は次のようなものを考えていました。
log y=log a *(b^x)
しかし、関数の指定はどうしたらよいのでしょうか?何かいい方法はないでしょうか?
どのように解決するのですか?
コメントを拡大して回答します。
以下を使用すると
y <- c(1.0385, 1.0195, 1.0176, 1.0100, 1.0090, 1.0079, 1.0068, 1.0099, 1.0038)
x <- c(3,4,5,6,7,8,9,10,11)
data <- data.frame(x,y)
f <- function(x,a,b) {a^b^x}
(m <- nls(y ~ f(x,a,b), data = data, start = c(a=0.9, b=0.6)))
または
(m <- nls(y ~ f(x,a,b), data = data, start = c(a=1.2, b=0.4)))
取得します。
Nonlinear regression model
model: y ~ f(x, a, b)
data: data
a b
1.0934 0.7242
residual sum-of-squares: 0.0001006
Number of iterations to convergence: 10
Achieved convergence tolerance: 3.301e-06
を使用すると必ずエラーが発生します。
1
の開始値として
a
というのは、おそらく
1
は、何にでも上げることができます。
1
.
開始値の自動生成については、私はその手順をよく知りません。 私が読んだことのある方法のひとつは、曲線をシミュレートし、データに近似していると思われる曲線を生成する開始値を使用することです。
上記のパラメータ推定値を用いて、以下のコードで生成したプロットがこちらです。 右下の線がもう少しフィットしてもいいかもしれないことは認めます。
setwd('c:/users/mmiller21/simple R programs/')
jpeg(filename = "nlr.plot.jpeg")
plot(x,y)
curve(1.0934^(0.7242^x), from=0, to=11, add=TRUE)
dev.off()
<イグ
関連
-
[解決済み】R:関数に有限な'ylim'値が必要
-
[解決済み] promise already under evaluation: recursive default argument reference or earlier problems?
-
[解決済み】エラー。Rの'break'の数が無効
-
[解決済み】ロジスティック回帰 - eval(family$initialize) : y 値は 0 <= y <= 1 である必要があります。
-
[解決済み】Rヒストグラムの範囲エラー:いくつかの'x'がカウントされない; 'break'が'x'の範囲に及ばないかもしれない
-
[解決済み】長いオブジェクトの長さは、短いオブジェクトの長さの倍数ではない?[重複]。
-
[解決済み】r Error dim(X) must have a positive length?
-
[解決済み】R 置換する項目数が置換長の倍数でない/しかし結果は正しい
-
[解決済み】Rでのデータ操作。'X'はアトミックでなければならない
-
[解決済み】 eval(expr, envir, enclos) でのエラー : オブジェクトが見つかりません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】rbind エラー。"名前が以前の名前と一致しない"
-
[解決済み] テスト
-
[解決済み】reshape2 meltの警告メッセージ
-
[解決済み】x[[i]]でのエラー:レベル2で再帰的インデックス作成に失敗した
-
[解決済み】R ggplot2 で scale_x_discrete を使用する。
-
[解決済み】 boxplotに色を追加する - "離散的なスケールに連続的な値が供給される "エラー
-
[解決済み】Rヒストグラムの範囲エラー:いくつかの'x'がカウントされない; 'break'が'x'の範囲に及ばないかもしれない
-
[解決済み】Rはプロットするが、アブラインを描画しない
-
[解決済み】Rで結果の行数がベクトル長(arg 2)の倍数でない件
-
[解決済み】.External.graphics Rでエラーが発生しました。