2

loess()R でandを使用する際に問題が発生してpredict()います。次のコードを使用してデータをシミュレートしました。

Overall=0.6
RR=1.1
Noise=0.05

x=seq(from=0.01, to=10, by=0.01) 
logRR=log(RR)
logBeta0=log(Overall)


linear.pred = logBeta0 + (logRR*x) + rnorm(length(x), 0, Noise*sqrt(x))
linear.pred.high = logBeta0 + (logRR*15) + rnorm(length(x), 0, Noise/5)

PoissonRate <- function (x) ifelse(x<=9, exp(linear.pred), exp(linear.pred.high))

xyplot(PoissonRate(x)~x) #the shape of the 'raw' data


loess_fit <- loess(x~PoissonRate(x))
lines(predict(loess_fit), col = "black")

申し訳ありませんが、これがどのように見えるかを示すために写真を添付する方法がわかりません!

最後の 2 行のコードは、グラフの半分にランダムな黒い線を追加するだけですが、以前に別の (非常に類似した) データでこのコマンドを使用したときは、うまく機能しているように見えました。何が足りないの?! どんな助けでも素晴らしいでしょう、ありがとう:)

4

1 に答える 1

1

少なくとも私の理解では、呼び出しの外で呼び出してはいけませんllines()(それが意味する場合)。もっている:lines()xyplot?llines

Description:

     These functions are intended to replace common low level
     traditional graphics functions, primarily for use in panel
     functions.

したがって、1 つのオプションは、提案されているとおりに実行し、その場で独自のパネル関数を構築することです。次に例を示します。

set.seed(1)
dat <- data.frame(pr = PoissonRate(x), x = x)
loess_fit <- loess(pr ~ x, data = dat)

xyplot(PoissonRate(x) ~ x,
  panel = function(x, y, ...) {
    panel.xyplot(x, y, ...)
    llines(dat$x, predict(loess_fit), col.line = "red")
  })

これは以下を生成します:

ここに画像の説明を入力

一般に、私はおそらくこれを別の方法で行うでしょう - 私は数式の外でデータを生成します。I はpredict、新しいデータの場所が の範囲にわたって均等に、順番に広がっている場合に使用しますx。そうすれば、入力データが昇順でなくてもx、ライン プロットに使用できる適切な予測が得られます。例えば

## following on from the above
pred <- with(dat, data.frame(x = seq(min(x), max(x), length = 100)))
pred <- transform(pred, pr = predict(loess_fit, newdata = x))

xyplot(PoissonRate(x) ~ x,
  panel = function(x, y, ...) {
    panel.xyplot(x, y, ...)
    with(pred, llines(x, pr, col.line = "red"))
  })
于 2013-03-27T17:56:54.170 に答える