在R中使用pdf函数模拟随机绘制

问题描述

我对以下数据进行了(高斯)核密度估计:

x <- c(4.09,4.46,4.61,4.30,4.03,5.22,4.21,4.07,4.02,4.58,4.66,4.05,4.23,5.51,4.72,4.47,4.50,5.80,4.09,4.78,4.18,4.45,4.40,5.60,4.37,4.42,4.88,4.20,4.10,4.43,4.38)
h <- bw.nrd(x)
h

kde <- function(y) {
  1/36/h/sqrt(2*pi)*sum(exp(((y-x)/h)^2*-1/2))
}

我应该根据上面的内核密度估计/ pdf模拟36个随机抽取。也就是说,上面代码中的函数kde是pdf,我希望从该数据范围(最好在4.02至5.80)中采样36次。 (但是,当然,我们可以抛出超出此范围的结果。)当然,如果我知道如何从pdf中绘制随机数,则可以编写一个带有36次迭代的for循环。给定pdf,您如何绘制一个值?

编辑:我发现我可以使用拒绝采样。但这似乎很复杂。 这是正确的吗?

samples <- numeric(0)

for (i in 1:36) {
  reject <- TRUE
  while (reject) {
    y <- runif(1,5.8)
    u <- runif(1)
    if (u < kde(y)/10/dunif(y)) {
      samples[i] <- y
      reject <- FALSE
    }
  }
}

samples

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)