web-dev-qa-db-ja.com

stat_summaryを使用した標準エラーバー

次のコードは、Hmisc、ddply、およびggplotを使用して標準エラーバーを含む棒グラフを作成します。

means_se <- ddply(mtcars,.(cyl),
                  function(df) smean.sdl(df$qsec,mult=sqrt(length(df$qsec))^-1))
colnames(means_se) <- c("cyl","mean","lower","upper")
ggplot(means_se,aes(cyl,mean,ymax=upper,ymin=lower,group=1)) + 
  geom_bar(stat="identity") +  
  geom_errorbar()

ただし、me​​an_sdlなどのヘルパー関数を使用して上記を実装する方がはるかに優れているようです。たとえば、次のコードは95%CIエラーバーを含むプロットを生成します。

ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_sdl, geom = "errorbar")

私の質問は、標準エラーバーにstat_summary実装を使用する方法です。問題は、SEを計算するには条件ごとの観測数が必要であり、これにmean_sdlの乗数でアクセスする必要があることです。

Ggplot内でこの情報にアクセスするにはどうすればよいですか?これのためのきちんとした非ハッキングソリューションはありますか?

18
aleph4

さて、グループごとにstat_summaryに乗数を取得する方法を説明することはできません。

ただし、目標は、プロット前にデータセットを要約せずに、ggplotの平均から1つの標準誤差を表す平均と誤差範囲をプロットすることです。

ggplot2にはmean_se関数があり、これはHmiscmean_cl_normalの代わりに使用できます。 mean_se関数のデフォルトの乗数は1であるため、標準のエラーバーが必要な場合は、追加の引数を渡す必要はありません。

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_se, geom = "errorbar")

Hmiscmean_cl_normal関数を使用する場合は、乗数を1に変更して、平均から1つの標準エラーを取得する必要があります。 mult引数は、mean_cl_normalの引数です。使用している集計関数に渡す必要がある引数は、fun.args引数のリストとして指定する必要があります。

ggplot(mtcars, aes(cyl, qsec)) + 
    stat_summary(fun.y = mean, geom = "bar") + 
    stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1))

ggplot2の2.0以前のバージョンでは、引数を直接渡すことができました。

ggplot(mtcars, aes(cyl, qsec)) + 
  stat_summary(fun.y = mean, geom = "bar") + 
  stat_summary(fun.data = mean_cl_normal, geom = "errorbar", mult = 1) 
43
aosmith