在R中模拟给定的概率密度函数

Simulating given probability density function in R

给出以下p.d.f:

f(x)=2x/k^2, where 0 <= x <= k

令 k=10,我试图为此模拟 100 次 p.d.f,然后打印前 5 个结果并求所有 100 次结果的平均值。

如果你想模拟 0k 之间的均匀分布,那么你可以将 runif(n, min, max) 传递到你的 pdf 中。

f <- function(x, k) {
  return(2*x/k^2)
}

k <- 10
res <- f(runif(100, 0, k), k)
print(res[1:5])
print(mean(res))

根据 MrFlick 的评论,如果您想要进行逆变换采样,这就足够了。

pdf <- function(x, k) {
  return(2*x/k^2)
}

cdf <- function(x, k){
  return(x^2/k^2)
}

icdf <- function(y, k){
  return(sqrt(k^2*y))
}

k <- 10
res <- icdf(runif(100,0,1), k)
print(res[1:5])
print(mean(res))