Geom_violin + geom_error_bar

У меня есть 500 оценок 3 объектов. Моя цель - построить график скрипки, чтобы понять распределение оценки, но в то же время я хочу визуализировать стандартную ошибку (оцененную другим способом), оценку среднего значения и истинное значение.

Вот что у меня есть:

object1 <- rnorm(500,mean=1,sd=0.1)
object2 <- rnorm(500,mean=2,sd=0.1)
object3 <- rnorm(500,mean=3,sd=0.1)

estimations <- data.frame(object1,object2,object3)
colnames(estimations) <- 1:3

SEframe <- data.frame()
SEframe <- rbind(SEframe,c(1,1,mean(object1),0.1))
SEframe <- rbind(SEframe,c(2,2,mean(object2),0.15))
SEframe <- rbind(SEframe,c(3,3,mean(object3),0.25))

colnames(SEframe) <- c("ID","True.value","Estimated.value","SE")

estMelted <- melt(estimations)
estMelted$variable <- as.factor(estMelted$variable)

p <- ggplot(estMelted, aes(x=variable, y=value)) + 
  geom_violin()

Теперь я хотел бы иметь на графике линию для истинного значения и планку ошибок для оценки и SE.

Как я могу это сделать?


person TheAvenger    schedule 17.07.2019    source источник
comment
Просто добавьте geom_errorbar, указав, что вам нужны отдельные данные. p + geom_errorbar(data=SEframe, aes(x=ID, y=Estimated.value, ymin=Estimated.value - SE, ymax=Estimated.value+SE)) + geom_point(data=SEframe, aes(x=ID, y=Estimated.value))   -  person January    schedule 17.07.2019


Ответы (1)


Вы всегда можете указать другие наборы данных для дополнительных слоев. Здесь мы добавляем слой geom_errorbar и слой geom_point, оба из которых мы используем с data=SEframe.

p + 
  geom_errorbar(data=SEframe, aes(x=ID, 
             ymin=Estimated.value - SE, 
             ymax=Estimated.value+SE), inherit.aes=F) + 
  geom_point(data=SEframe, aes(x=ID, y=Estimated.value))

Обратите внимание на использование inherit.aes=FALSE. Причина в следующем: по умолчанию geom_errorbar наследует сопоставление от ggplot(), но это сопоставление использует столбец с именем value. Хоть geom_errorbar и не нужен (поскольку не нужен y), он все равно будет унаследован и вызовет проблемы. Таким образом, мы указываем, что aes не должен наследоваться.

person January    schedule 17.07.2019