【问题标题】:Simulate from kernel density estimator with variable underlying grid从具有可变底层网格的核密度估计器模拟
【发布时间】:2017-11-20 18:47:06
【问题描述】:

我有一个数据集,用于通过估计核密度来创建经验概率分布。现在我正在使用 MASS 包中的 R 的 kde2d。估计概率分布后,我使用sample 从沿 x 轴的二维分布切片中采样。我使用sample 很像描述的here。示例代码如下所示

library(MASS)
set.seed(123)
x = rnorm(100, 1, 0.1)
set.seed(456)
y = rnorm(100, 1, 0.5)
den <- kde2d(x, y, n = 50, lims = c(-2, 2, -2, 2))
#to plot this 2d kde:
#library(lattice)
#persp(den)
conditional_probabilty_density = list(x = den$y, y = den$z[40, ])
#to plot the slice:
#plot(conditional_probabilty_density)
simulated_sample = sample(conditional_probabilty_density$x, size = 10, replace = TRUE, prob = conditional_probabilty_density$y)

den 看起来像这样

我的数据已知区域波动很大,需要精细的网格粒度。其他区域基本上没有数据点,也没有发生任何事情。如果我可以将kde2dn 参数设置为一个非常高的数字,以便在任何地方都能很好地解析我的数据,那我会很好。唉,由于内存限制,这是不可能的。

这就是为什么我认为我可以修改kde2d 函数以具有非恒定粒度。
Here 是kde2d 函数的源代码。 可以修改一行

gy <- seq.int(lims[3L], lims[4L], length.out = n[2L])

并将所需的任何粒度放在 y 轴上。例如

a <- seq(-1, 0, 0.5)
gy <- c(a, seq.int(0.1, 2, length.out = n[2L]-length(a)))

修改后的kde2d 返回指定位置的核密度估计。效果很好。假设我现在有

问题是,我不能再使用sample 从沿 x 轴的切片中采样。因为分布左侧的部分更精细,因此被sample采样的概率更高。

我可以做些什么来在我需要的地方建立一个精细的网格,但要根据其适当的密度从分布中采样?非常感谢。

【问题讨论】:

    标签: r random probability-density kernel-density


    【解决方案1】:

    conditional_probabilty_density 上使用approx 和新的n

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 2021-01-25
      • 2017-10-14
      • 1970-01-01
      • 2014-03-22
      • 2018-10-06
      • 2020-04-18
      • 2013-04-21
      • 2012-01-06
      相关资源
      最近更新 更多