1

これは私が今のところいるところです:

df2 つの列(両方とも実数を含む) を持つデータ フレームがAあり、は に依存しています。列を互いにプロットします。Bba

p = ggplot(df, aes(A, B)) + geom_point()

関係が非線形であることを確認します。追加:

p = p + geom_smooth(method = 'loess', span = 1)

最適な「良好な」ラインを提供します。Iの新しい値aが与えられるとA、次の方法を使用して の値を予測しますB

B.loess = loess(B ~ A, span = 1, data = df)
predict(B.loess, newdata = a)

ここまでは順調ですね。ただし、使用して外挿できないことに気付きloessました (おそらくノンパラメトリックなので?!)。外挿はかなり自然に見えます - 関係は力のようなものが起こっているように見えます。

x = c(1:10)
y = 2^x
df = data.frame(A = x, B = y)

ここで行き詰まります。まず、この種の (「パワー」) データに最適な線を使用せずにプロットするには、どのような方法を使用できloessますか? 次のような哀れな試み:

p = ggplot(df, aes(A, B)) + geom_point() +
      geom_smooth(method = 'lm', formula = log(y) ~ x)

エラーを教えてください。また、満足のいく最適な線を実際にプロットできると仮定すると、 を使用predictしたときと同様の方法で使用するのに問題がありloessます。例として、最適なラインに満足しているとします。

p = ggplot(df, aes(A, B)) + geom_point() +
      geom_smooth(method = 'lm', formula = y ~ x)

B次に、11 (理論的には 2^11) に等しい場合にどのような値になるかを予測したい場合A、次の方法は機能しません。

B.lm = lm(B ~ A)
predict(B.lm, newdata = 11)

どんな助けでも大歓迎です。乾杯。

4

2 に答える 2

10

最初に、最後の質問に答えるには、colnames が予測子である data.frame を提供する必要があります。

B.lm <- lm(B ~ A,data=df)
predict(B.lm, newdata = data.frame(A=11))

     1 
683.3333 

loess の代わりに、より高次の多項式回帰を試すことができます。ここで、このプロットで私は(xspline補間を追加する方が簡単)を使用するのと比較poly~3しますが、ggplot2.(レイヤー)と同様の構文です。loesslatticeExtra

xyplot(A ~ B,data=df,par.settings = ggplot2like(),
       panel = function(x,y,...){
         panel.xyplot(x,y,...)
         grid.xspline(x,y,..., default.units = "native") ## xspline interpolation
       })+
  layer(panel.smoother(y ~ poly(x, 3), method = "lm"), style = 1)+  ## poly
  layer(panel.smoother(y ~ x, span = 0.9),style=2)   ### loeess

ここに画像の説明を入力

于 2013-02-22T17:25:12.130 に答える
5

のデフォルトsurfaceはwhich であり、当然のことながら外挿は許可されませんloess.control。これが意味があるかどうかについては疑問が残りますが、interpolate代わりにを使用すると推定できます。direct

predict(loess(hp~disp,mtcars),newdata=1000)
[1] NA
predict(loess(hp~disp,mtcars,control=loess.control(surface="direct")),newdata=1000)
[1] -785.0545
于 2013-02-22T17:36:04.593 に答える