Как использовать r, чтобы подогнать линейное сочетание распределений Вейбулла к PDF или CDF набора данных? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть набор данных для ~ 50 образцов с функцией плотности вероятности размеров зерен для каждого образца. У меня нет отдельных точек данных, только распределение. Prior Работа с похожими данными предполагает, что образцы представляют собой смесь двух (или трех, я думаю) исходных материалов, каждый из которых имеет двухпараметрическое распределение Вейбулла. Я хотел бы определить относительный процент каждого источника и связанных параметров Weibull.

Это вроде как эта проблема, но в том вопросе распределение было известно, и это было вопрос реализации. Это также похоже на этот вопрос, но в этом вопросе данные были исходными точками данных, а распределение было гаммой, а не Вейбуллом. (Weibull не реализован с flexmix, как я объясню ниже.)

Вот необработанные данные для одного образца.

Size,CDF,PDF
0.243,0,0
0.276,5.00E-05,5.00E-05
0.314,0.0013,0.00125
0.357,0.0036,0.0023
0.405,0.0071,0.0035
0.46,0.01185,0.00475
0.523,0.0176,0.00575
0.594,0.0241,0.0065
0.675,0.03085,0.00675
0.767,0.03735,0.0065
0.872,0.04325,0.0059
0.991,0.04825,0.005
1.13,0.0524,0.00415
1.28,0.0559,0.0035
1.45,0.0591,0.0032
1.65,0.0623,0.0032
1.88,0.06585,0.00355
2.13,0.06995,0.0041
2.42,0.07495,0.005
2.75,0.0811,0.00615
3.12,0.08875,0.00765
3.55,0.0981,0.00935
4.03,0.10915,0.01105
4.58,0.12175,0.0126
5.21,0.13565,0.0139
5.92,0.1505,0.01485
6.72,0.1658,0.0153
7.64,0.1813,0.0155
8.68,0.1968,0.0155
9.86,0.21225,0.01545
11.2,0.22795,0.0157
12.7,0.2445,0.01655
14.5,0.26275,0.01825
16.4,0.28385,0.0211
18.7,0.3093,0.02545
21.2,0.34055,0.03125
24.1,0.37885,0.0383
27.4,0.4251,0.04625
31.1,0.47945,0.05435
35.3,0.54105,0.0616
40.1,0.608,0.06695
45.6,0.6775,0.0695
51.8,0.7461,0.0686
58.9,0.81015,0.06405
66.9,0.86655,0.0564
76,0.91305,0.0465
86.4,0.9485,0.03545
98.1,0.97325,0.02475
111,0.9886,0.01535
127,0.9967,0.0081
144,0.9995,0.0028
163,1.00015,0.00065
186,1.00015,0

До сих пор мне удалось использовать CDF данные с помощью dr c (из пакета drm) для оценки единственного соответствия Weibull, но это определенно неверно для моих данных. Ниже приведены примерки dr c, мои необработанные данные и код, который их создал:

model <- drm(CDF ~ Size fct = W1.2(), data = HY37_300360)
model2 <- drm(CDF ~ Size, fct = W2.2(), data = HY37_300360)

Это CDF с W1.2 (черным цветом) и W2.2 (в синий) с моими необработанными данными (кружки)

Это PDF-файл с указанным выше соответствием (W2.2 соответствует черному, необработанные данные синим)

Я вижу, что теоретически пакет flexmix и связанная с ним функция flexmix могут работать, но flexmix еще не реализовал дистрибутивы Weibull. (Код ошибки: Ошибка в FLXMCdist1 (dist = "Weibull"): этот дистрибутив еще не реализован.)

Кроме того, поскольку использование flexmix требует, чтобы я создал набор данных Syntheti c из обратного CDF , это не идеальное решение для меня. Для запуска этих решений (для 50 образцов) требуется огромный объем хранилища и много времени, и при этом теряются данные. Я бы предпочел работать напрямую с данными, которые я получил от машины для определения размера зерна.

Итак, мой вопрос: как мне подогнать смесь распределений, чтобы я получил функцию, которая выглядит примерно так: f ( x) = c* W2.2 () + (1- c) * W2.2 () где две разные функции «W2.2» предназначены для разных пиков?

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

Большое спасибо!

Обновить : Я нашел программу Python (QGrain), которая делает то, что мне нужно. В настоящее время он не работает на ОС Ma c, но работает на Windows.

...