我将如何创建一个R代码算法来采样截断的Weibull(0,1(和Uniform(2,4(的混合分布。给我带来困难的主要部分是截断的威布尔分布。通常,Weibull 分布是在正实线上定义的,因此我无法使用 R 提供的内置函数。混合物分布如下:
f(x( = 0.3 × 威布尔(0,1( + 0.7 ×U(2,4(
注意:截断的 Weibull 分布如下:
f(x; k, λ( = c(k/λ([(x/λ(^(k−1(]exp{−(x/λ(^k}, x ∈ (0, 1(
哪里
c=1/{1 − exp(−1/(λ^k((}
统一数字由 runif(100,2,4)
生成。鉴于截断的 Weibull 已以某种方式生成,您可以按如下方式混合它们:
u <- runif(100,2,4)
w <- ... # truncated weibull, see below
s <- runif(100) # s <- rbinom(n,2,0.3)
x <- ifelse(s<0.3, w, u) # x <- ifelse(s==1,w,u)
对于截断的威布尔,请参阅谷歌搜索找到的 https://www.jstatsoft.org/article/view/v016c02/v16c02.pdf 的第6页。或者,我只会生成威布尔随机数(使用 rweibull
(,然后截断。注意:您确定 weibull 的形状参数为零吗?