Netlogo - 从 Beta-Pert 分布中抽样
Netlogo - Sampling from a Beta-Pert Distribtuion
我发布这个部分是为了让问题得到解答,部分是为了让其他人以后可以找到它并避免他们头疼。
我正在尝试按照 Epix Analytics
中的公式在 NetLogo 中创建 beta-pert 分布
我在 Beta 分布维基页面上使用伽玛分布的转换创建了 Beta(Alpha1, alpha2) 分布:
我创建的代码是:
to pert
let mu ((a + 4 * b + c) / 6)
let alpha1 ((mu - a ) * (2 * b - a - c)) / ((b - mu) * (c - a))
let alpha2 (alpha1 * (c - mu)) / (mu - a)
let x (random-gamma alpha1 1)
let y (random-gamma alpha2 1)
let beta-output (x / (x + y))
let output beta-output * (c - a) + a
show output
end
我的问题是关于维基百科页面从 Gamma 分布到 Beta 分布的转换。它有一个 theta 作为伽马分布的第二部分,但从未定义它是什么。我把它当作占位符,只要 X 和 Y 的 theta 相同,就不会影响结果。我玩过不同的 theta 值,分布没有明显变化。这是一个正确的假设吗?
to-report random-pert [#minval #likeval #maxval]
;use pert params to draw from a beta distribution
if not (#minval <= #likeval and #likeval <= #maxval) [error "wrong argument ranking"]
if (#minval = #likeval and #likeval = #maxval) [report #minval] ;;handle trivial inputs
let pert-var 1. / 36
let pert-mean (#maxval + 4 * #likeval - 5 * #minval) / (6 * (#maxval - #minval))
let temp pert-mean * (1 - pert-mean) / pert-var
let alpha1 pert-mean * (temp - 1)
let alpha2 (1 - pert-mean) * (temp - 1)
let x1 random-gamma alpha1 1
let x2 random-gamma alpha2 1
report (x1 / (x1 + x2)) * (#maxval - #minval) + #minval
end
我发布这个部分是为了让问题得到解答,部分是为了让其他人以后可以找到它并避免他们头疼。
我正在尝试按照 Epix Analytics
中的公式在 NetLogo 中创建 beta-pert 分布我在 Beta 分布维基页面上使用伽玛分布的转换创建了 Beta(Alpha1, alpha2) 分布:
我创建的代码是:
to pert
let mu ((a + 4 * b + c) / 6)
let alpha1 ((mu - a ) * (2 * b - a - c)) / ((b - mu) * (c - a))
let alpha2 (alpha1 * (c - mu)) / (mu - a)
let x (random-gamma alpha1 1)
let y (random-gamma alpha2 1)
let beta-output (x / (x + y))
let output beta-output * (c - a) + a
show output
end
我的问题是关于维基百科页面从 Gamma 分布到 Beta 分布的转换。它有一个 theta 作为伽马分布的第二部分,但从未定义它是什么。我把它当作占位符,只要 X 和 Y 的 theta 相同,就不会影响结果。我玩过不同的 theta 值,分布没有明显变化。这是一个正确的假设吗?
to-report random-pert [#minval #likeval #maxval]
;use pert params to draw from a beta distribution
if not (#minval <= #likeval and #likeval <= #maxval) [error "wrong argument ranking"]
if (#minval = #likeval and #likeval = #maxval) [report #minval] ;;handle trivial inputs
let pert-var 1. / 36
let pert-mean (#maxval + 4 * #likeval - 5 * #minval) / (6 * (#maxval - #minval))
let temp pert-mean * (1 - pert-mean) / pert-var
let alpha1 pert-mean * (temp - 1)
let alpha2 (1 - pert-mean) * (temp - 1)
let x1 random-gamma alpha1 1
let x2 random-gamma alpha2 1
report (x1 / (x1 + x2)) * (#maxval - #minval) + #minval
end