以下场景已成为调查员(I)、审稿人/编辑(R,与 CRAN 无关)和我(M)作为情节创建者三人组中最常见的问题。我们可以假设 (R) 是典型的医学大佬审稿人,他只知道每个剧情都必须有误差线,否则就是错误的。当涉及统计审查员时,问题就不那么重要了。
设想
在典型的药理学交叉研究中,测试了两种药物 A 和 B 对葡萄糖水平的影响。每位患者以随机顺序进行两次测试,并假设没有遗留问题。主要终点是葡萄糖 (BA) 之间的差异,我们假设配对 t 检验就足够了。
(I) 想要一个显示两种情况下绝对葡萄糖水平的图。他担心 (R) 对误差线的渴望,并要求在条形图中提供标准误差。让我们不要在这里开始条形图大战._)
(I):那不可能。条形重叠,我们有 p=0.03?这不是我在高中学到的。
(M): 我们这里有一个配对设计。请求的误差线完全不相关,重要的是配对差异的 SE/CI,图中未显示。如果我可以选择并且没有太多数据,我更喜欢下面的情节
补充1:这是几个回复中提到的平行坐标图
(M):线条显示配对,大多数线条都向上,这是正确的印象,因为斜率是最重要的(好吧,这是绝对的,但尽管如此)。
(I):那幅画令人困惑。没有人理解它,而且它没有误差线(R 潜伏着)。
(M):我们还可以添加另一个图,显示差异的相关置信区间。与零线的距离给人以效果大小的印象。
(一):没人做
(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()