使用 Tidyverse 和 fitdistrplus 进行批量分布拟合
Batch distribution fitting using Tidyverse and 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
拟合到 Gamma 分布(忽略对采样数据与分布的拟合程度的测试)
使用 fitdistrplus
包,我可以通过将个体 P_ID
的 X
提取到向量中然后通过 fw <- fitdist(data,"gamma")
运行 来实现此目的] 然后提取出 shape
和 rate
描述性变量,但这都是非常手动的。
我想找到一种使用 tidyverse 从上面的数据框转到:
P_ID
Distrib
G_Shape
G_Rate
ID_233
Gamma
1.21557116
0.09206639
ID_234
Gamma
3.23234542
0.34566432
ID_235
Gamma
2.34555553
0.92344521
我如何使用 Tidyverse 和 Pipes 实现这一点,而不是连续执行 for 循环?
您可以使用 group_by
为每个人应用 fitdist
,并从每个模型中提取 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
我有一个数据集如下(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
包,我可以通过将个体 P_ID
的 X
提取到向量中然后通过 fw <- fitdist(data,"gamma")
运行 来实现此目的] 然后提取出 shape
和 rate
描述性变量,但这都是非常手动的。
我想找到一种使用 tidyverse 从上面的数据框转到:
P_ID | Distrib | G_Shape | G_Rate |
---|---|---|---|
ID_233 | Gamma | 1.21557116 | 0.09206639 |
ID_234 | Gamma | 3.23234542 | 0.34566432 |
ID_235 | Gamma | 2.34555553 | 0.92344521 |
我如何使用 Tidyverse 和 Pipes 实现这一点,而不是连续执行 for 循环?
您可以使用 group_by
为每个人应用 fitdist
,并从每个模型中提取 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