次のシナリオは、調査担当者(I)、校閲者/編集者(R、CRANとは無関係)、およびプロット作成者としての私(M)のトリオで最もよくある質問になりました。(R)は、各プロットがエラーバーを持たなければならないことだけを知っている典型的な医療大ボスレビューアであると仮定できます。そうでなければ、それは間違っています。統計レビューアが関与している場合、問題はそれほど重大ではありません。
シナリオ
典型的な薬理学的クロスオーバー研究では、2つの薬物AとBがグルコースレベルへの影響についてテストされます。各患者は、キャリーオーバーがないという仮定の下で、ランダムな順序で2回テストされます。主要エンドポイントはグルコース(BA)の違いであり、対応のあるt検定が適切であると想定しています。
(I)両方の場合の絶対グルコースレベルを示すプロットが必要です。彼は(R)のエラーバーに対する欲求を恐れ、棒グラフの標準エラーを求めます。ここで棒グラフ戦争を始めないでください。
(I):それは真実ではない。バーは重なり、p = 0.03?それは私が高校で学んだことではありません。
(M):ここにはペアのデザインがあります。要求されたエラーバーは完全に無関係です。重要なのは、プロットに示されていないペアの差のSE / CIです。選択肢があり、データが多すぎない場合は、次のプロットを選択します
追加1:これは、いくつかの応答で言及された平行座標プロットです
(M):線はペアリングを示し、ほとんどの線が上昇します。勾配が重要なので正しい印象です(わかりました、これはカテゴリですが、それでもなお)。
(I):その写真は紛らわしいです。誰もそれを理解しておらず、エラーバーもありません(Rは潜んでいます)。
(M):差の関連する信頼区間を示す別のプロットを追加することもできます。ゼロラインからの距離は、効果の大きさの印象を与えます。
(I):誰もやらない
(R):そして貴重な木を無駄にします
(M):(良いドイツ人として):はい、木の上のポイントが取られます。ただし、複数の治療法と複数のコントラストがある場合は、これを使用します(公開することはありません)。
提案はありますか?プロットを作成する場合、Rコードは以下のとおりです。
# Graphics for Crossover experiments
library(ggplot2)
library(plyr)
theme_set(theme_bw()+theme(panel.margin=grid::unit(0,"lines")))
n = 20
effect = 5
set.seed(4711)
glu0 = rnorm(n,120,30)
glu1 = glu0 + rnorm(n,effect,7)
dt = data.frame(patient = rep(paste0("P",10:(9+n))),
treatment = rep(c("A","B"), each=n),glucose = c(glu0,glu1))
dt1 = ddply(dt,.(treatment), function(x){
data.frame(glucose = mean(x$glucose), se = sqrt(var(x$glucose)/nrow(x)) )})
tt = t.test(glucose~treatment,paired=TRUE,data=dt,conf.int=TRUE)
dt2 = data.frame(diff = -tt$estimate,low=-tt$conf.int[2], up=-tt$conf.int[1])
p = paste("p =",signif(tt$p.value,2))
png(height=300,width=300)
ggplot(dt1, aes(x=treatment, y=glucose, fill=treatment))+
geom_bar(stat="identity")+
geom_errorbar(aes(ymin=glucose-se, ymax=glucose+se),size=1., width=0.3)+
geom_text(aes(1.5,150),label=p,size=6)
ggplot(dt,aes(x=treatment,y=glucose, group=patient))+ylim(0,190)+
geom_line()+geom_point(size=4.5)+
geom_text(aes(1.5,60),label=p,size=6)
ggplot(dt2,aes(x="",y=diff))+
geom_errorbar(aes(ymin=low,ymax=up),size=1.5,width=0.2)+
geom_text(aes(1,-0.8),label=p,size=6)+
ylab("95% CI of difference glucose B-A")+ ylim(-10,10)+
theme(panel.border=element_blank(), panel.grid.major.x=element_blank(),
panel.grid.major.y=element_line(size=1,colour="grey88"))
dev.off()