带加权数据的 Weibull 分布
Weibull distribution with weighted data
我有时间处理事件数据,我需要为模拟模型的子组生成大约 200 个 shape/scale 参数。我分析过数据,它最好服从威布尔分布。
通常,我会使用 fitdistrplus 包和 fitdist(x, "weibull")
来这样做,但是这个数据已经使用内核匹配进行了匹配,我有一个权重值变量叫做 km
,所以需要合并一个权重,它据我所知,这不是 fitdist
可以做的事情。
使用我的伽马分布数据而不是使用 fitdist
我使用 hsmisc
包中的 wtd.mean
和 wtd.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.3919991
和 lscale = 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))
。现在运行并输出加权值。
我有时间处理事件数据,我需要为模拟模型的子组生成大约 200 个 shape/scale 参数。我分析过数据,它最好服从威布尔分布。
通常,我会使用 fitdistrplus 包和 fitdist(x, "weibull")
来这样做,但是这个数据已经使用内核匹配进行了匹配,我有一个权重值变量叫做 km
,所以需要合并一个权重,它据我所知,这不是 fitdist
可以做的事情。
使用我的伽马分布数据而不是使用 fitdist
我使用 hsmisc
包中的 wtd.mean
和 wtd.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.3919991
和 lscale = 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))
。现在运行并输出加权值。