2017-07-10 7 views
0

私はRでグラフと曲線をプロットする方法を学び、plot()curve()関数をデータと曲線の両方をプロットするためのデータセットで使用しました。しかし、私は最も効率的な方法を使用しているとは思わない。Rの曲線()図面で非線形回帰モデルを呼び出す方が良いでしょうか?

data.frameから2つのベクトルを設定してから、oと呼ぶオブジェクトをのような関数(o<-nls(y~I(a*x^3)+I(b*x^2)+I(c*x)+d))に割り当てました。 oa,bcd)の係数値をすべてoと呼ぶことで、すべての係数値を得ることができました。次に、ポイントをプロットした後に、これらの値の近似値をcurve()関数に挿入することができます。それはうまくいきますが、私はを直接curve関数に接続する方法があるかどうか疑問に思っていましたので、各係数を再入力する必要はありませんか?

+1

あなたは[再現可能な例]を提供する場合それはあなたを助けるために簡単です(https://stackoverflow.com/questions/5963269/how-to-make-a-great -r-reproducible-example)を入力して、可能な解決策をテストできるようにします。これは 'predict()'関数で解決できる可能性があります。 – MrFlick

+0

もし、私がフォローしているのであれば、あなたは以下のローランドへの私の反応のようなものを見ることを好むでしょう。私はおそらくここでこれらを段階的に整理することができたかもしれないので、私はそれを謝ります。 – DeCodened

答えて

1

あなたの関数は多項式なので、その係数は線形であることに注意してください。とにかく、lmと同様にnlsと同じように動作します。フィット感のためのdata.frameを指定します。

o <- lm(y ~ poly(x, 3, raw = TRUE), data = DF) 
plot(y ~ x, data = DF) 
curve(predict(o, newdata = data.frame(x = x)), add = TRUE) 
+0

Rolandは式を必要としません(この場合、xの係数は 'o 'からの多項式です)? 'lines'を使って、' y'値を明示的に取得する 'predict'関数を使ってカーブを追加することができます。 – eipi10

+0

@ eipi10はい、カーブには関数またはxを含む式が必要です。この例では、後者を渡します。いくつかのダミーデータを作成してテストします。それは動作します(テストされていないので、コードに誤字があるかもしれません)。私はこの建設を定期的に使用しています。 – Roland

+0

このRolandをありがとう。だから私はこの方法論を使って結果を再現しようとしましたが、別の曲線を受けました: 元々:DF <-read.csv(.....) x <-DF [、1] y <-DF [ (c3 * x)+ c4) coeff:-3.712e-05 7.559eを有していた。 -03 -7.784e-01 2.719e + 01 今度は、 <-lm(y - poly(x、3、raw = TRUE)) curve(predict(o)、add = TRUE)) 私は**同じ係数を得ました**しかしグラフにプロットされた線は同じではありません。かなり困惑した。私はあなたがlm()関数で既にデータを得ているならば、lm()にオプションのデータを残すことができると思いますか? – DeCodened