【发布时间】:2018-04-26 09:48:03
【问题描述】:
我对 g(x) = 1, 0 ≤ x ≤ 1 的 beta 分布使用接受-拒绝方法。 功能是: f(x) = 100x^3(1-x)^2.
我想创建一个算法来从这个密度函数中生成数据。
如何在 k = 1000 次重复 (n=1000) 时估计 P(0 ≤ X ≤ 0.8)?我如何在 R 中解决这个问题?
我已经有了:
beta.rejection <- function(f, c, g, n) {
naccepts <- 0
result.sample <- rep(NA, n)
while (naccepts < n) {
y <- runif(1, 0, 0.8)
u <- runif(1, 0, 0.8)
if ( u <= f(y) / (c*g(y)) ) {
naccepts <- naccepts + 1
result.sample[n.accepts] = y
}
}
result.sample
}
f <- function(x) 100*(x^3)*(1-x)^2
g <- function(x) x/x
c <- 2
result <- beta.rejection(f, c, g, 10000)
for (i in 1:1000){ # k = 1000 reps
result[i] <- result[i] / n
}
print(mean(result))
【问题讨论】:
-
f(x) = 10x^2(1-x)^5是一个怎样的算法?请更详细地解释您的问题,并展示您解决问题的尝试。 -
这是一个函数,而不是算法。目前尚不完全清楚您打算使用此功能做什么。
-
您可以从在
[0,1]上找到f(x)的上限开始