0

次の画像があります。 プロット

そして、赤と青の線を滑らかにしたいと思います。しかし、私はそれを行う方法がわかりません。赤と青の線は、それぞれ黒い点の上部と下部の 95% 間隔を表します。(95%間隔を取得するために回帰式を使用しなかったことに注意してください)黄土関数について読みましたが、使用しようとしたとき。同じプロットが返されます。これらの2行を滑らかにすることを可能にする特定の組み込みR関数はありますか。

あるいは、この問題に対して「95% のポイントごとの間隔」を取得する方法はありますか?

コードを以下に示します。

residual.plot <- function(a,b)
{
    log.y1 <- log(a) - b * log(energy)
    fitted.y <- exp(log.y1)
    diff <- count - fitted.y
    #normal approximation
    low.interval <- c()
    high.interval <- c()
    for(i in 1:350)
    {
        low <- diff[i] - sqrt(  exp(log(a) - b * log(energy[i])) )*qnorm(0.975)
        high <- diff[i] + sqrt(  exp(log(a) - b * log(energy[i]))  )*qnorm(0.975)
        low.interval <- append(low.interval, low)
        high.interval <- append(high.interval, high)
    }
    par(mfrow = c(1,1))
    plot(energy, diff, ylim = c(-10,10), type = "p", pch = 7)
    lines(energy, low.interval, type = "p", col = "red", pch = 1)
    lines(energy, high.interval, type = "p", col = "blue", pch = 1)


}
4

1 に答える 1

5

まず第一に、二度とそのようなコードを投稿しないでください。あなたは2つの大罪を犯します:

  • 反復ループでオブジェクトを成長させます(そこにはたくさんの問題があります)
  • Rがベクトル化されて機能するという事実を使用しません。

つまり、これを行う最も簡単な方法はlowess、データに NA 値がない場合、 を使用することです。関数は次のようになります。

residual.plot <- function(a,b,count,energy)
{
    log.y1 <- log(a) - b * log(energy)
    fitted.y <- exp(log.y1)
    diff <- count - fitted.y

    #normal approximation
        low <- diff - sqrt(  exp(log(a) - b * log(energy)) )*qnorm(0.975)
        high <- diff + sqrt(  exp(log(a) - b * log(energy))  )*qnorm(0.975)

    par(mfrow = c(1,1))
    plot(energy, diff, ylim = c(-10,10), type = "p", pch = 7)
    lines(lowess(energy, low), type = "p", col = "red", pch = 1)
    lines(lowess(energy, high), type = "p", col = "blue", pch = 1)


}

countPS: 関数を便利にするために、たとえばや などの関数の外部からの変数を当てにしないでくださいenergy。それらを引数として関数に追加して、後で別のデータセットを使用するときに関数を使用できるようにします。

于 2012-12-21T17:26:14.663 に答える