У меня есть время для обработки данных, которые мне нужны, чтобы сгенерировать около 200 параметров формы / масштаба для подгрупп для имитационной модели. Я проанализировал данные, и они лучше всего соответствуют распределению Вейбулла. Обычно я бы использовал пакет fitdistrplus и fitdist(x, "weibull")
для этого, однако эти данные были сопоставлены с использованием сопоставления ядра, и у меня есть переменная весовых значений, называемая km
, и поэтому мне нужно включить вес, который fitdist
не может делать как насколько я могу судить. С моими данными, распределенными по гамме, вместо использования fitdist
я выполнил расчет вручную, используя функции wtd.mean
и wtd.var
из пакета hsmisc
, которые работали хорошо. Однако найти аналогичную формулу для вейбулла ускользает от меня.
Я тестировал несколько вариантов и сравнивал их с результатами фитдиста:
test_data <- rweibull(100, 0.676, 946)
fitweibull <- fitdist(test_data, "weibull", method = "mle", lower = c(0,0))
fitweibull$estimate
shape scale
0.6981165 935.0907482
Сначала я протестировал это: Распределение Вейбулла в R (ExtDist)
library(bbmle)
m1 <- mle2(y~dweibull(shape=exp(lshape),scale=exp(lscale)),
data=data.frame(y=test_data),
start=list(lshape=0,lscale=0))
что дало мне lshape = -0.3919991
и lscale = 6.852033
Еще я пробовал eweibull
из пакета EnvStats
.
eweibull <- eweibull(test_data)
eweibull$parameters
shape scale
0.698091 935.239277
Однако, хотя они и дают результаты, я все еще не думаю, что смогу уместить свои данные с весами ни в один из них.
Изменить: я также пробовал использовать одноименный eWeibull
из пакета ExtDist
(который, я не уверен на 100%, все еще работает, но у него есть функция weibull, которая принимает вес!). Я получаю много сообщений об ошибках о том, что входные данные не вычислимы (NA или бесконечны). Если я сделаю это с map
, то map(test_data, test_km, eWeibull)
я получу [[NULL] для всех 100 значений. Если я попробую просто с test_data, я получу длинную строку ошибок, связанных с optimx.
Я также пробовал fitDistr
из propagate
, который дает ошибки weights
, которые должны иметь определенную длину. Например, если для обоих задано значение 100, я получаю сообщение об ошибке, что weights
должна иметь длину 94. Если я установил значение 94, он сообщает мне, что длина должна быть 132.
Мне нужно иметь возможность передавать в расчет либо набор предварительно взвешенных данных среднего / var / sd и т. Д., Либо иметь функцию, которая может принимать данные и веса и использовать их оба в расчетах.