Распределение Вейбулла с взвешенными данными

У меня есть время для обработки данных, которые мне нужны, чтобы сгенерировать около 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 и т. Д., Либо иметь функцию, которая может принимать данные и веса и использовать их оба в расчетах.


person Sarah Roberts    schedule 19.07.2018    source источник


Ответы (1)


После долгих проб и ошибок я отредактировал функцию eweibull из пакета EnvStats, вместо использования mean(x) и sd(x), чтобы вместо этого использовать wtd.mean(x,w) и sqrt(wtd.var(x, w)). Теперь он запускает и выводит взвешенные значения.

person Sarah Roberts    schedule 23.07.2018