สถานการณ์ต่อไปนี้ได้กลายเป็นคำถามที่พบบ่อยที่สุดในสามผู้ตรวจสอบ (I) ผู้ตรวจสอบ / บรรณาธิการ (R ไม่เกี่ยวข้องกับ CRAN) และฉัน (M) ในฐานะผู้สร้างพล็อต เราสามารถสรุปได้ว่า (R) เป็นผู้ตรวจทานบอสใหญ่ทางการแพทย์โดยทั่วไปที่รู้ว่าแต่ละพล็อตต้องมีแถบข้อผิดพลาดมิฉะนั้นจะผิด เมื่อผู้ตรวจทานเชิงสถิติเข้ามาเกี่ยวข้องปัญหาก็สำคัญน้อยกว่ามาก
สถานการณ์
ในการศึกษาทางเภสัชวิทยาทั่วไปพบว่ามีการทดสอบยา A และ B สองตัวเพื่อดูผลของระดับน้ำตาลในเลือด ผู้ป่วยแต่ละรายจะถูกทดสอบสองครั้งตามลำดับแบบสุ่มและอยู่ภายใต้ข้อสมมติว่าไม่มีการพกพา จุดสิ้นสุดหลักคือความแตกต่างระหว่างกลูโคส (BA) และเราคิดว่าการทดสอบแบบจับคู่นั้นเพียงพอแล้ว
(I) ต้องการพล็อตที่แสดงระดับน้ำตาลที่แน่นอนในทั้งสองกรณี เขากลัวความต้องการของแถบข้อผิดพลาดและขอข้อผิดพลาดมาตรฐานในกราฟแท่ง อย่าเริ่มสงครามกราฟแท่งที่นี่เลย)
(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()