0

我有一个如下数据集(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的数据拟合到 Gamma 分布(忽略对采样数据与分布的拟合程度的测试)

使用该fitdistrplus包,我可以通过X将个人提取P_ID到向量中然后运行它 fw <- fitdist(data,"gamma")然后提取描述shaperate变量来实现这一点,但这都是非常手动的。

我想找到一种方法,使用 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 循环?

4

1 回答 1

0

您可以申请 fitdist每个人使用group_by并提取每个模型shaperate值。

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
于 2021-01-15T06:42:34.947 回答