R 使用单独的数据集时,定位_道奇
我试图生成一个图表,显示两组误差条,但不同的误差条表示对中心趋势/变异性的不同估计(例如,带sd的平均值和带分位数的中值)。我试图使用position_dodge,但它不起作用,我怀疑这是因为我从不同的数据集中输入了它的值。下面是一个可复制的示例: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") ####
#### 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完美解决方案。简洁明了。谢谢