Подгонка пакетной рассылки с использованием Tidyverse и fitdistrplus

#r #tidyverse #fitdistrplus

#r #tidyverse #fitdistrplus

Вопрос:

У меня есть следующий набор данных (более 10 000 строк):

P_ID SNUM RNUM X
ID_233 10 2 40.31
ID_233 10 3 23.21
ID_234 12 5 11.00
ID_234 12 6 0.31
ID_234 13 1 0.00
ID_235 10 2 66.23

Из этого набора данных я хочу подогнать каждое отдельное P_ID распределение к гамма-распределению (игнорируя тестирование того, насколько хорошо отобранные данные соответствуют распределению)

Используя fitdistrplus пакет, я могу добиться этого, извлекая X для отдельного лица P_ID в вектор, а затем прогоняя его, fw <- fitdist(data,"gamma") а затем извлекая shape rate описательные переменные и, но все это очень вручную.

Я хотел бы найти метод, использующий tidyverse, для перехода от фрейма данных выше к:

P_ID Распределение G_Shape G_Rate
ID_233 Гамма 1.21557116 0.09206639
ID_234 Гамма 3.23234542 0.34566432
ID_235 Гамма 2.34555553 0.92344521

Как бы я добился этого с помощью Tidyverse и Pipes и не выполнял последовательность циклов for?

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

1. Как вы извлекаете shape и rate описываете переменные из fw ?

2. fw$estimate['shape'] и fw$estmate['rate']

Ответ №1:

Вы можете подать fitdist заявку на каждое индивидуальное использование group_by и извлечь shape rate значения из каждой модели.

 library(dplyr)
library(purrr)
library(fitdistrplus)

data %>%
  group_by(P_ID) %>%
  summarise(model = list(fitdist(X, "gamma"))) %>%
  mutate(G_Shape = map_dbl(model, pluck, 'estimate', 'shape'),
         G_rate =  map_dbl(model, pluck, 'estimate', 'rate')) -> result

result