ggplot2: график плотности со средней / 95% доверительной линией интервала - PullRequest
3 голосов
/ 28 января 2020

Я знаю, что существует способ нарисовать график плотности с помощью квадратного графика следующим образом: Таким образом, в основном, на этом графике использовались медиана и квартили.

enter image description here

Однако я не смог выяснить, как я могу express средние и доверительные интервалы 1009 * каждой плотности сюжет. Мне интересно, есть ли способ, которым я могу построить линию "среднее значение и доверительный интервал" на оси X (вместо прямоугольника с медианой и квартилями) на основе ggplot2.

Я пытался использовать geom_errorbarh, но не смог сгенерировать то, что хотел увидеть.

Вот код R со средним и 95% -ным доверительным интервалом, сохраненный в sum_stat .

library(ggplot2)
library(ggridges)
library(grid)
library(reshape2)
library(ggstance)
library(dplyr)

# Generating the dataset
x <- data.frame(v1=rnorm(5000, mean = -0.02, sd = 0.022),
                v2=rnorm(5000, mean =  0.02, sd = 0.022),
                v3=rnorm(5000, mean =  0.04, sd = 0.022))

colnames(x) <- c("A", "B", "C")

# Summary statistics
mean_vec <- colMeans(x)
sd_vec   <- apply(x, 2, sd)
n        <- nrow(x)

error <- qnorm(0.975)*sd_vec/sqrt(n)
left  <- mean_vec - error
right <- mean_vec + error

sum_stat <- cbind(left, mean_vec, right)

# Melting the data
data <- melt(x)
# head(data); str(data)


ggplot(data, aes(x = value, y = variable)) +
  geom_density_ridges(aes(fill = variable), alpha=0.2, scale=0.8) +
  geom_boxploth(aes(fill = variable), width = 0.06, outlier.shape = NA)

Я с нетерпением жду ответа от вас всех!

Спасибо.

1 Ответ

2 голосов
/ 28 января 2020

Чтобы использовать geom_errorbarh, вам нужно будет передать inherit.aes = FALSE, чтобы иметь возможность построить среднее значение и CI. (Примечание: я также преобразую ваш sum_stat в кадр данных и добавлю столбец variable, чтобы упростить построение графика)

sum_stat <- data.frame(sum_stat)
sum_stat$variable = rownames(sum_stat)

ggplot(data, aes(x = value, y = variable)) +
  geom_density_ridges(aes(fill = variable), alpha=0.2, scale=0.8) +
  geom_point(inherit.aes = FALSE, data = sum_stat, 
             aes(x= mean_vec, y = variable, color = variable),show.legend = FALSE)+
  geom_errorbarh(inherit.aes = FALSE, data = sum_stat, 
                 aes(xmin = left, xmax = right, y = variable, color = variable), 
                 height = 0.1, show.legend = FALSE)

enter image description here

Это то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...