首页 > 解决方案 > 带有加权数据的 Weibull 分布

问题描述

我有一些时间来处理需要为模拟模型的子组生成大约 200 个形状/比例参数的事件数据。我已经分析了数据,它最好遵循威布尔分布。通常,我会使用 fitdistrplus 包并fitdist(x, "weibull")执行此操作,但是此数据已使用内核匹配进行匹配,并且我有一个称为权重值的变量,km因此需要合并一个权重,fitdist就我而言,这是无法做到的可以告诉。使用我的伽马分布数据而不是使用fitdist我手动使用wtd.meanand进行计算wtd.var函数hsmisc,效果很好。然而,为 weibull 找到一个类似的公式让我望而却步。

我一直在测试一些选项并将它们与 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

我首先对此进行了测试:R (ExtDist) 中的 Weibull 分布

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

我尝试过的另一件事是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)我得到所有 100 个值的 [[NULL] 。如果我只用 test_data 尝试它,我会得到一长串与 optimx 相关的错误。

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

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

标签: rdistributionweightedweibull

解决方案


经过多次试验和错误,我将包中的eweibull函数编辑为而不是使用and ,改为使用and 。现在运行并输出加权值。EnvStatsmean(x)sd(x)wtd.mean(x,w)sqrt(wtd.var(x, w))


推荐阅读