问题描述
我对以下数据进行了(高斯)核密度估计:
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 (将#修改为@)