R 使用单独的数据集时,定位_道奇

R 使用单独的数据集时,定位_道奇,r,ggplot2,graphics,R,Ggplot2,Graphics,我试图生成一个图表,显示两组误差条,但不同的误差条表示对中心趋势/变异性的不同估计(例如,带sd的平均值和带分位数的中值)。我试图使用position_dodge,但它不起作用,我怀疑这是因为我从不同的数据集中输入了它的值。下面是一个可复制的示例: #### simulate dosages dose = factor(rep(c("small", "medium", "large"), times=10)) dose = relevel(dose, "small") ####

我试图生成一个图表,显示两组误差条,但不同的误差条表示对中心趋势/变异性的不同估计(例如,带sd的平均值和带分位数的中值)。我试图使用position_dodge,但它不起作用,我怀疑这是因为我从不同的数据集中输入了它的值。下面是一个可复制的示例:

    #### simulate dosages
dose = factor(rep(c("small", "medium", "large"), times=10))
dose = relevel(dose, "small")

    #### simulate fevers, based on dosage (but highly skewed)
fever = rnorm(length(dose), 100, 1)
betas = matrix(c(0, -3, -6), nrow=1)
fever = fever + as.numeric(betas%*%t(model.matrix(fever~dose)))

    #### put into data frame
d = data.frame(dose=dose, fever=fever)

    #### compute means and standard errors
means = d %>% group_by(dose) %>% summarise(mean=mean(fever), lower=mean - sd(fever), upper = mean + sd(fever))
medians = d %>% group_by(dose) %>% summarise(median=median(fever), lower=quantile(fever, .25), upper = quantile(fever, .75))

    #### put all into a ggplot
ggplot(d, aes(x=dose, y=fever)) +
    geom_jitter(alpha=.2, width=.2) +
    geom_point(data=means, aes(x=dose, y=mean)) +
    geom_point(data=medians, aes(x=dose, y=median), col="red") +
    geom_errorbar(data=means, aes(y=mean, ymin=lower, ymax=upper), width=.2, position=position_dodge(width=.2)) + 
    geom_errorbar(data= medians, aes(y=median, ymin=lower, ymax=upper), width=.2, position=position_dodge(width=.2), col="red") 
这将给出下图的结果:

注意躲避是不起作用的


让我们假设我不能只使用stat_summary(我不能…我实际上是在将均值与另一个包中的一些稳健估计值进行比较)。是否有任何方法可以抵消错误条/点,以便更好地看到它们?

将两种统计数据的数据帧组合在一起,以便可以映射组上的统计数据类型:

means <- df %>% 
  group_by(dose) %>% 
  summarise(Statistic = "Mean", Value = mean(fever), lower=mean(fever) - sd(fever), upper = mean(fever) + sd(fever)) 

medians <- df %>% 
  group_by(dose) %>% 
  summarise(Statistic = "Median", Value = median(fever), lower=quantile(fever, 0.25), upper = quantile(fever, 0.75)) 

df2 <- bind_rows(means, medians)

#### put all into a ggplot
ggplot(df, aes(x = dose, y = fever)) +
  geom_jitter(alpha = .2, width = .2) +
  geom_point(data = df2, aes(x = dose, y = Value, color = Statistic)) +
  geom_errorbar(data = df2, aes(y = Value, ymin = lower, ymax = upper, 
                group = Statistic, color = Statistic), 
                width=.2, position = position_dodge(width = .2))  
表示%
组别(剂量)%>%
总结(Statistic=“Mean”,Value=平均值(发烧),lower=平均值(发烧)-sd(发烧),lower=平均值(发烧)+sd(发烧))
中间值%
组别(剂量)%>%
总结(Statistic=“Median”,Value=中位数(发烧),lower=分位数(发烧,0.25),upper=分位数(发烧,0.75))

df2完美解决方案。简洁明了。谢谢