Получить стандартное отклонение группы, где счетчик находится в столбце

#r #dplyr

#r #dplyr

Вопрос:

Я хочу получить стандартное отклонение, сгруппированное по годам. Все примеры, которые я видел, не включают столбец агрегированного подсчета.

Я хочу использовать сумму столбца count как часть вычисления стандартного отклонения.

 year  count age
2018  2     0
2018  3     1
2018  4     2
2017  1     0
2017  4     1
2017  2     2
  

Ожидаемый ответ на вышеуказанное будет:-

Год 2018 = 0,78567420131839

2017 год = 0,63887656499994

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

1. Что вы получаете 0.78567 за 2018 год? Можете ли вы объяснить вычисление?

2. @RonakShah ОП использует MLE для дисперсии, а не R стандартную оценку моментов Пирсона.

3. Чтобы получить ответ на 2018 год, я просто расширил значения до 0,0,1,1,1,2,2,2,2, затем я подключил эти значения к calculator.net/… Я вижу, что при переходе от совокупности к выборке я получаю тот же ответ, что и @rjen

Ответ №1:

Следующее должно сработать.

 library(dplyr)
library(purrr)

data <- tibble(year = c(2018, 2018, 2018, 2017, 2017, 2017),
               count = c(2, 3, 4, 1, 4, 2),
               age = c(0, 1, 2, 0, 1, 2))

data %>%
  mutate(vec = map2(age, count, ~ rep(.x, .y))) %>%
  group_by(year) %>%
  mutate(concs = list(unlist(vec))) %>%
  ungroup() %>%
  mutate(age_sd = map_dbl(concs, sd)) %>%
  select(-vec, -concs)

#    year count   age age_sd
#   <dbl> <dbl> <dbl>  <dbl>
# 1  2018     2     0  0.833
# 2  2018     3     1  0.833
# 3  2018     4     2  0.833
# 4  2017     1     0  0.690
# 5  2017     4     1  0.690
# 6  2017     2     2  0.690
  

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

1. Привет, похоже, что это так, я получаю тот же ответ, когда я подключаю значения к онлайн-калькулятору в режиме выборки, а не совокупности.