3

非線形フィットを行うときに、nlsの残余誤差を0にする方法はありますか?私のデータには、行われた近似でエラーが0になるはずのケースがありますが、nlsは常に失敗し、エラーを吐き出します。

誰かが私に見せてもらえますか:

  1. これがnlsによって吐き出されているエラーであるかどうかをテストするにはどうすればよいですか?
  2. エラーケースを0にする方法は?(パーフェクトフィット)

これは私のnls呼び出しです:

fit <- nls(y ~ ifelse(g, m1 * (x - x0) + y0, m2 * (x - x0) + y0),
            start = c(m1 = -1, m2 = 1, y0 = 0, x0 = split),
            algorithm = "port",
            lower = c(m1 = -Inf, m2 = -Inf, y0 = -Inf, x0 = split),
            upper = c(m1 = Inf, m2 = Inf, y0 = Inf, x0 = (split+1)),
            data=data.frame(x,y))
4

1 に答える 1

6

前の回答で述べたように、0エラーデータには使用しないように?nls 明示的に述べています。nls使用している関数のヘルプファイルを直接引用するには:

人工的な「ゼロ残差」データにnlsを使用しないでください。

nls関数は、現在のパラメーター推定値での数値の不正確さを残差平方和と比較する相対オフセット収束基準を使用します。これは、フォームのデータでうまく機能します

y = f(x、θ)+ eps

(var(eps)> 0の場合)。フォームのデータの収束を示すことができません

y = f(x、θ)

基準は、丸め誤差の2つの要素を比較することになるためです。人工データでnlsをテストする場合は、次の例に示すように、ノイズ成分を追加してください。

潜在的に危険なオプションは、警告のみ(エラーなし)で収束する前warnOnly = TRUEに強制的nlsに戻るために使用することです。

x <- -(1:100)/10
y <- 100 + 10 * exp(x / 2)
nlmod <- nls(y ~  Const + A * exp(B * x),control = nls.control(warnOnly = TRUE))

上記の例も、からほぼ直接取得したもの?nlsです。

于 2011-08-20T18:33:21.027 に答える