2017-03-23 19 views
1

編集:以下のコメントに基づいて、私はより明示的にすることに決めました。ここで私が取り組んでいるデータの例です。Rのベースグラフィックを使用したSEMエラーバーを含むグループ化バープロット?

> example_data 
    A  B  outcome 
1 2.31 1.47  Y 
2 2.14 1.32  N 
3 3.49 1.00  Y 
4 2.12 0.62  Y 
5 0.47 0.55  N 
6 3.36 0.50  N 
7 3.50 0.33  Y 
8 1.97 0.39  Y 
9 3.12 0.99  N 
10 2.04 0.89  Y 
11 2.78 0.36  Y 
12 1.83 0.70  N 
13 3.53 0.77  N 
14 2.25 0.39  N 
15 1.67 0.43  N 
16 3.09 1.10  Y 

だから、私は2つの変数ABを持っています。それらは大きな変数のサブグループなので、同じY軸で表現することができます。私は2つのレベルを持つ別の変数outcomeでそれらをグループ化したいと思います。

私は今、私はまた、矢印を使用する必要があり、次の

> dataset <- example_data 
> attach(dataset) 
> means1<- tapply(A,outcome,function(x) mean(x,na.rm=TRUE)) 
> means2<- tapply(B,outcome,function(x) mean(x,na.rm=TRUE)) 
> std.err1<- tapply(A,outcome,function(x)sd(x,na.rm=TRUE)/sqrt(length(na.omit(x)))) 
> std.err2<- tapply(B,outcome,function(x)sd(x,na.rm=TRUE)/sqrt(length(na.omit(x)))) 
> matrix_means<- matrix(c(means1,means2),byrow = TRUE) 
> graph<- barplot(matrix_means, beside=TRUE, space=c(0.2,0,0.2,0), axes=FALSE, ann=FALSE, col=c("white","black","red","blue"),ylim=c(0,4), names=c("Outcome-N","Outcome-Y","Outcome-N","Outcome-Y"), xpd=FALSE) 
> axis(2, cex.axis=1.5) 

は、各グループの平均値とmean+sem間のSEMバーを描画する機能です。

tapplyを使用してSEMを取得できますが、4つのバーのそれぞれに矢印を配置する方法はわかりません。

> arrows(graph, means1, graph, means1 + std.err1, graph, means2, graph, means2 + std.err2, code=3, angle=90, length=0.1) 

これはプロット上に矢印を配置しません。 baseグラフィックやないggplot2、私はこれをどのように行うかを使用して

?助けてもらえますか?私の他のすべてのグラフはRGrapheRパッケージを使用して作成されていましたので、私はそれもすべて私の原稿のように見えるので、ベースのグラフィックを使用してこれもやろうとしています。

ありがとうございました。

+0

を呼び出すことによって、正しい結果を得るでしょう'dput(matrix_means)'の出力やサブサンプルを貼り付けることができます。 – Djork

答えて

0

R.S. MCVEを作成すると、問題を理解して助けてくれるのがもっと簡単になります。データセットが非常に大きく、その分かりやすいサブセットを作成するのが難しい場合は、プリロードされたデータセットが便利です。 data(package="datasets")を実行すると、利用可能なものの一覧が表示されます。

この場合、あなたの質問はかなり一般的です。あなたが書いたことから、あなたはすでにそこの半分以上です。 オブジェクトには、関連するx値が含まれています。平均値とSEM値を使って、矢印の開始位置と延長距離を知っているので、この情報をベクトルとしてarrow関数に渡すだけで、あなたは金色になります。

データを提供していないので、mtcarsデータセットを使用してデモンストレーションします。返信で

data(mtcars) 

summ.df <- data.frame(
    mean=tapply(mtcars$hp, mtcars$cyl, mean), 
    sd=tapply(mtcars$hp, mtcars$cyl, sd), 
    n=tapply(mtcars$hp, mtcars$cyl, length)) 

summ.df$sem <- summ.df$sd/sqrt(summ.df$n) 

par(mar=c(2.5, 2.5, 2, 1.5)) 
bplt <- barplot(summ.df$mean, col="white") 
arrows(bplt, summ.df$mean+summ.df$sem, 
     bplt, summ.df$mean-summ.df$sem, 
     angle=90, code=3, xpd=NA, length=0.1) 

barplot with error bars (1 SE)

更新
arrowsへの呼び出しはあなたにトラブルを引き起こしているものです。ドキュメント(?arrows)を読むと、4つの最初の引数は矢印の開始点と終了点のx座標とy座標です。各矢印について、開始および終了x値は同じであり(それらは完全に垂直である)、によって与えられ、一方、終了および開始y値はそれぞれ平均±SEMによって与えられる。

そのようにあなたが例えば、再現性の例を提供してください

arrows(graph, c(means1, means2) + c(std.err1, std.err2), 
     graph, c(means1, means2) - c(std.err1, std.err2), 
     code=3, angle=90, length=0.1) 
+0

それは魅力的に機能しました。ありがとう。 – jaydoc

関連する問題