を使用してプロットに最適な行を追加する基本的な関数を作成しようとしていますnls
。に渡された数式によってデータが正確に定義されていない限り、これはうまく機能しnls
ます。私は問題を認識しており、これはここで報告されているように文書化された動作であることを認識しています。
私の質問は、モデルによって正確に記述されているデータに関係なく、どうすればこれを回避し、最適な線を強制的にプロットできるかということです. データの一致を正確に検出し、完全に適合する曲線をプロットする方法はありますか? 私の現在の危険な解決策は次のとおりです。
#test data
x <- 1:10
y <- x^2
plot(x, y, pch=20)
# polynomial line of best fit
f <- function(x,a,b,d) {(a*x^2) + (b*x) + d}
fit <- nls(y ~ f(x,a,b,d), start = c(a=1, b=1, d=1))
co <- coef(fit)
curve(f(x, a=co[1], b=co[2], d=co[3]), add = TRUE, col="red", lwd=2)
次のエラーで失敗します。
Error in nls(y ~ f(x, a, b, d), start = c(a = 1, b = 1, d = 1)) :
singular gradient
私が適用する簡単な修正jitter
はデータにわずかですが、これは少し破壊的でハックのようです。
# the above code works after doing...
y <- jitter(x^2)
より良い方法はありますか?