График кумулятивного среднего значения в ggplot

#r #ggplot2

Вопрос:

Пояснение: Я хочу подсчитать количество событий, произошедших с каждым человеком до каждого возраста, группы по полу, и вычислить среднее значение. Так, например, в наборе данных четыре женщины. В возрасте 20 лет для всех женщин проводится в общей сложности 4 мероприятия, а в возрасте 21 года-всего 6 мероприятий. Поскольку в наборе данных 4 женщины, совокупное среднее (если это подходящее слово) в возрасте 20 лет составляет 1, в возрасте 21 года среднее значение составляет 1,5 и т. Д. Это то, что я хочу визуализировать в линейном графике.

У меня есть данные, которые выглядят так:

 set.seed(123)

id <- rep(1:8, each = 5)
female <- (c(rep(1,20), rep(0, 20)))
age <- c(rep(20:24, 8))

dat <- data.frame(id, female, age)

dat$event <- sample(rep(c(1, 0), nrow(dat) / 2))
 

Где столбец id представляет уникальное лицо, являющееся женщиной, если женщина равна 1. Событие равно 1, если оно произошло, и 0, если оно не произошло.

Я хочу создать линейную диаграмму с совокупным средним значением событий, происходящих в каждом возрасте, сгруппированных по полу. То есть я хочу визуализировать совокупное количество событий, пережитых мужчинами в среднем в возрасте 20,…, 24 лет,и женщинами в среднем в возрасте 20,…, 24 лет.

Я надеюсь, что это имеет смысл и возможно достичь.

Комментарии:

1. можете ли вы уточнить, как вы хотите математически подсчитать «совокупное среднее значение событий» или «совокупное количество событий»? Я чувствую, что это будет своего рода ряд событий. Глядя на ответы Трина Космуса Нобеля и КоДа, можно сказать, что они оба сделали это по-разному. Так что, возможно, будет лучше, если вы сможете подробнее остановиться на этих двух словах.

Ответ №1:

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

 library(dplyr)
library(ggplot2)

set.seed(123)

id <- rep(1:8, each = 5)
female <- (c(rep(1,20), rep(0, 20)))
age <- c(rep(20:24, 8))

dat <- data.frame(id, female, age)

dat$event <- sample(rep(c(1, 0), nrow(dat) / 2))

dat <- dat %>% group_by(female, age) %>%                        
  summarise_at(vars(event),
               list(mean = mean))

ggplot(dat, aes(x=age, y=mean, group=female))  
  geom_line(aes(linetype=as.character(female)))  
  geom_point()
 

введите описание изображения здесь

Ответ №2:

Надеюсь, я правильно вас понял

 library(dplyr)
library(ggplot2)

set.seed(123)

id <- rep(1:8, each = 5)
female <- (c(rep(1,20), rep(0, 20)))
age <- c(rep(20:24, 8))

dat <- data.frame(id, female, age)

dat$event <- sample(rep(c(1, 0), nrow(dat) / 2))
    
dats <- dat %>%
  arrange(age)%>%
  group_by(age, female)%>%
  mutate(cumul = cumsum(event))%>%
  summarise(mean(cumul))
  

ggplot(dats, aes(x = age, y =dats
 #r #ggplot2



Вопрос:

Пояснение: Я хочу подсчитать количество событий, произошедших с каждым человеком до каждого возраста, группы по полу, и вычислить среднее значение. Так, например, в наборе данных четыре женщины. В возрасте 20 лет для всех женщин проводится в общей сложности 4 мероприятия, а в возрасте 21 года-всего 6 мероприятий. Поскольку в наборе данных 4 женщины, совокупное среднее (если это подходящее слово) в возрасте 20 лет составляет 1, в возрасте 21 года среднее значение составляет 1,5 и т. Д. Это то, что я хочу визуализировать в линейном графике. У меня есть данные, которые выглядят так:
 set.seed(123)

id <- rep(1:8, each = 5)
female <- (c(rep(1,20), rep(0, 20)))
age <- c(rep(20:24, 8))

dat <- data.frame(id, female, age)

dat$event <- sample(rep(c(1, 0), nrow(dat) / 2))
 

Где столбец id представляет уникальное лицо, являющееся женщиной, если женщина равна 1. Событие равно 1, если оно произошло, и 0, если оно не произошло.

Я хочу создать линейную диаграмму с совокупным средним значением событий, происходящих в каждом возрасте, сгруппированных по полу. То есть я хочу визуализировать совокупное количество событий, пережитых мужчинами в среднем в возрасте 20,..., 24 лет,и женщинами в среднем в возрасте 20,..., 24 лет.

Я надеюсь, что это имеет смысл и возможно достичь.

Комментарии:

1. можете ли вы уточнить, как вы хотите математически подсчитать "совокупное среднее значение событий" или "совокупное количество событий"? Я чувствую, что это будет своего рода ряд событий. Глядя на ответы Трина Космуса Нобеля и КоДа, можно сказать, что они оба сделали это по-разному. Так что, возможно, будет лучше, если вы сможете подробнее остановиться на этих двух словах.

Ответ №1:

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

 library(dplyr)
library(ggplot2)

set.seed(123)

id <- rep(1:8, each = 5)
female <- (c(rep(1,20), rep(0, 20)))
age <- c(rep(20:24, 8))

dat <- data.frame(id, female, age)

dat$event <- sample(rep(c(1, 0), nrow(dat) / 2))

dat <- dat %>% group_by(female, age) %>%                        
  summarise_at(vars(event),
               list(mean = mean))

ggplot(dat, aes(x=age, y=mean, group=female))  
  geom_line(aes(linetype=as.character(female)))  
  geom_point()
 

введите описание изображения здесь

Ответ №2:

Надеюсь, я правильно вас понял

mean(cumul)`, group = female))
geom_line(aes(linetype=as.character(female)))

введите описание изображения здесь

Ответ №3:

Я забыл об одном важном и очевидном шаге: группируйтесь по идентификатору и вычисляйте итоговое значение!

Это то, чего я хотел достичь:

 dat %>%
  group_by(id) %>%
  mutate(cumul = cumsum(event)) %>%
  group_by(female, age) %>%
  summarise(mean(cumul)) %>%
  ggplot(aes(age, `mean(cumul)`, colour = as.factor(female)))  
  geom_line()
 

введите описание изображения здесь