3

私はこのデータフレームを持っています:

> dat
   x         y        yerr
1 -1 -1.132711 0.001744498
2 -2 -2.119657 0.003889120
3 -3 -3.147378 0.007521881
4 -4 -4.220129 0.012921450
5 -5 -4.586586 0.021335644
6 -6 -5.389198 0.032892630
7 -7 -6.002848 0.048230946

そして、私はそれを標準誤差平滑化で次のようにプロットすることができます:

p <- ggplot(dat, aes(x=x, y=y)) + geom_point()
p <- p + geom_errorbar(data=dat, aes(x=x, ymin=y-yerr, ymax=y+yerr), width=0.09)
p + geom_smooth(method = "lm", formula = y ~ x)

ここに画像の説明を入力してください

しかし、私が必要としているのは、線形モデルに合うようにyerrを使用することです。ggplot2で可能ですか?

4

3 に答える 3

7

さて、私はこれに答える方法を見つけました。

データを収集する科学実験では、その実験が正しく実行された場合、すべてのデータ値にエラーが関連付けられている必要があります。

場合によっては、エラーの分散がすべての点で等しい場合がありますが、多くの場合、元の質問の現在のケースの状態のように、それは真実ではありません。したがって、曲線をデータに適合させるときは、さまざまな測定値の誤差値の分散に異なるものを使用する必要があります。

その方法は、重みをエラー値に帰することです。これは、統計分析方法によれば、1 / sqrt(errorValue)に等しいため、次のようになります。

p <- ggplot(dat, aes(x=x, y=y, weight = 1/sqrt(yerr))) + 
    geom_point() + 
    geom_errorbar(aes(ymin=y-yerr, ymax=y+yerr), width=0.09) + 
    geom_smooth(method = "lm", formula = y ~ x)

ここに画像の説明を入力してください

于 2013-02-01T12:11:45.127 に答える
6

どのモデルフィッティングでも、使用していたプロットパラダイムの外でフィッティングを行います。このためweightsに、観測値の分散に反比例する値を渡します。次に、加重最小二乗法を使用してフィッティングが行われます。

あなたの例/状況のために、ggplotgeom_smoothあなたのために次のことをしています。使いやすいように思えるかもしれませんがgeom_Smooth、モデルを直接フィッティングすることの利点は、最終的にはこれを上回ります。1つは、適合モデルがあり、適合、モデルの仮定などの診断を実行できることです。

加重最小二乗法を当てはめる

mod <- lm(y ~ x, data = dat, weights = 1/sqrt(yerr))

次にpredict()、モデルからx

newx <- with(dat, data.frame(x = seq(min(x), max(x), length = 50)))
pred <- predict(mod, newx, interval = "confidence", level = 0.95)

上記では、predict.lm使用するための適切な信頼区間を生成するメソッドを取得します。

次に、プロット用のデータを準備します

pdat <- with(data.frame(pred),
             data.frame(x = newx, y = fit, ymax = upr, ymin = lwr))

次に、プロットを作成します

require(ggplot2)
p <- ggplot(dat, aes(x = x, y = y)) +
       geom_point() +
       geom_line(data = pdat, colour = "blue") + 
       geom_ribbon(mapping = aes(ymax = ymax, ymin = ymin), data = pdat, 
                   alpha = 0.4, fill = "grey60")
p
于 2013-02-01T18:47:38.327 に答える
1

あなたの質問は少し曖昧です。ここにあなたが始めるかもしれないいくつかの提案があります。

  1. ggplot2はlm回帰のための関数を使用しているだけです。値を取得するには、次のようにします。

     lm(y ~ x, data=dat)
    

    これにより、y切片と勾配が得られます。

  2. 引数stat_smoothを使用して、標準エラーをオフに切り替えることができます。se

    .... + geom_smooth(method = "lm", formula = y ~ x, se = FALSE) 
    
  3. 次の方法で、ポイント/エラーバンドにリボンを追加できます。

    ##This doesn't look good. 
    .... + geom_ribbon(aes(x=x, ymax =y+yerr, ymin=y-yerr))
    
于 2013-02-01T09:07:46.103 に答える