2013-11-25 10 views
10

私はいくつかの研究を通してデータの集まりを持っています。各研究について、私は性別による変数の平均値に興味があり、これが有意に異なる場合は、各研究について、私は男性と女性の平均と95%の信頼区間を持っています。私はdotplots(ドットプロット、dotplot2、ドットプロット)のいくつかのフレーバーを使用していたが、かなりそこに取得していない enter image description hereエラーバー、2つのシリーズ、光ジッタを伴うドットプロット

:私がやりたい何

は、これに似たものです。

からDotplotを使用すると、私は1つのシリーズとそのエラーバーを持つことができましたが、私は2番目のシリーズを追加する方法を失っています。

私はDotplotを使用し、アドバイスに続くエラーバーの垂直終了点はhereです。ここで

は、私はこれが3つのデータの列、男性の平均(AVGM)、および95%信頼区間の下限と上限を(プロット

data<-data.frame(ID=c("Study1","Study2","Study3"),avgm=c(2,3,3.5),avgf=c(2.5,3.3,4)) 
data$lowerm <- data$avgm*0.9 
data$upperm <- data$avgm*1.1 
data$lowerf <- data$avgf*0.9 
data$upperf <- data$avgf*1.1 

# Create the customized panel function 
mypanel.Dotplot <- function(x, y, ...) { 
    panel.Dotplot(x,y,...) 
    tips <- attr(x, "other") 
    panel.arrows(x0 = tips[,1], y0 = y, 
       x1 = tips[,2], y1 = y, 
       length = 0.05, unit = "native", 
       angle = 90, code = 3) 
} 

library(Hmisc) 
Dotplot(data$ID ~ Cbind(data$avgm,data$lowerm,data$upperm), col="blue", pch=20, panel = mypanel.Dotplot, 
     xlab="measure",ylab="study") 

を使用していたコードの実施例でありますlowermとupperm)。私は他の3つのシリーズ、同じ研究のために、女性の被験者(avgf、lowerf、upperf)について同じ仕事をする。

私は次のようになり持って結果:

enter image description here

何を一言で言えば、欠落しています。

  1. に定義された手段と信頼区間を有する第二シリーズ(avgf)を追加同じ研究のための3つの他の変数

  2. いくつかの垂直ジッタを追加して、それらが1つ上にないようにしますもう一方の読者は、重複していても両方を見ることができます。

+2

あなたのコードを表示してください... – Thomas

+0

おかげで、コードが追加されました。残念ながら元の著者との契約のために元のデータを共有することはできないので、実行されません。 – PaoloCrosetto

+1

そのコードを追加していただきありがとうございます。ただし、機密情報を一切与えずに動作する小さなサンプルデータセットを構築することもできます。おそらく、2人の作家のデータをサブセット化し、数字を少し変えてアノニマス化し、* *を投稿します。 (アイデアは、潜在的な回答者が自分の持っているデータのフォーマットを推測し再構築することではありません)。 –

答えて

8

残念ながら私はDotplotのお手伝いをすることはできませんが、私はggplotを使用して、それはかなり簡単見つけます。データをわずかに並べ替えるだけで済みます。

library(ggplot2) 
# grab data for males 
df_m <- data[ , c(1, 2, 4, 5)] 
df_m$sex <- "m" 
names(df_m) <- c("ID", "avg", "lower", "upper", "sex") 
df_m 

# grab data for females 
df_f <- data[ , c(1, 3, 6, 7)] 
df_f$sex <- "f" 
names(df_f) <- c("ID", "avg", "lower", "upper", "sex") 
df_m 

# bind the data together 
df <- rbind(df_m, df_f) 

# plot 
ggplot(data = df, aes(x = ID, y = avg, ymin = lower, ymax = upper, colour = sex)) + 
    geom_point(position = position_dodge(width = 0.2)) + 
    geom_errorbar(position = position_dodge(width = 0.2), width = 0.1) + 
    coord_flip() + 
    scale_colour_manual(values = c("blue", "red")) + 
    theme_classic() 

enter image description here

# if you want horizontal grid lines you may change the last line with: 
    theme_bw() + 
    theme(panel.grid.major.y = element_line(colour = "grey", linetype = "dashed"), 
     panel.grid.major.x = element_blank(), 
     panel.grid.minor.x = element_blank()) 
+0

お返事ありがとう@Henrik。それは非常にきれいな解決策です。私はDotplotからの回答も得たいと思っています。私が作った別のDotplotと一緒にこれを入れたいからです。一貫したルック&フィールを持つことが大好きです。ありがとう。 – PaoloCrosetto

+0

私はyurコードを使用して終了しました(そして、ggplot2についてたくさん学んでいます)。ご回答有難うございます! – PaoloCrosetto

+0

@Henrikこの答えをありがとう! –

関連する問題