带加权数据的 Weibull 分布

Weibull distribution with weighted data

我有时间处理事件数据,我需要为模拟模型的子组生成大约 200 个 shape/scale 参数。我分析过数据,它最好服从威布尔分布。 通常,我会使用 fitdistrplus 包和 fitdist(x, "weibull") 来这样做,但是这个数据已经使用内核匹配进行了匹配,我有一个权重值变量叫做 km ,所以需要合并一个权重,它据我所知,这不是 fitdist 可以做的事情。 使用我的伽马分布数据而不是使用 fitdist 我使用 hsmisc 包中的 wtd.meanwtd.var 函数手动进行了计算,效果很好。然而,我却找不到类似的威布尔公式。

我一直在测试一些选项并将它们与 fitdist 结果进行比较:

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

我首先测试了这个:The Weibull distribution in 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.3919991lscale = 6.852033

我试过的另一件事是 EnvStats 包中的 eweibull

eweibull <- eweibull(test_data)
eweibull$parameters
shape       scale
0.698091    935.239277

然而,虽然这些给出了结果,但我仍然认为我无法将我的数据与权重放入其中任何一个。

编辑:我还尝试了 ExtDist 包中的类似名称 eWeibull (我不是 100% 确定它仍然有效,但确实有一个 weibull 函数,它需要一个权重! ).我收到很多关于输入不可计算(NA 或无限)的错误消息。如果我用 map 来做,那么 map(test_data, test_km, eWeibull) 我得到所有 100 个值的 [[NULL]。如果我仅使用 test_data 进行尝试,我会收到一长串与 optimx 相关的错误。

我也试过 propagate 中的 fitDistr,它给出的错误是 weights 应该是一个特定的长度。例如,如果两者都设置为 100,我会得到一个错误,即 weights 的长度应为 94。如果我将其设置为 94,它会告诉我它的长度必须为 132。

我需要能够将一组预先加权的 mean/var/sd 等数据传递到计算中,或者有一个函数可以获取数据和权重并在计算中同时使用它们。

经过反复试验,我将 EnvStats 包中的 eweibull 函数编辑为使用 mean(x)sd(x),而不是使用 [=14] =] 和 sqrt(wtd.var(x, w))。现在运行并输出加权值。