gpt4 book ai didi

r - 如何从自定义分布中采样?

转载 作者:行者123 更新时间:2023-12-03 17:48:12 24 4
gpt4 key购买 nike

我有一个发行版的pdf。此分布不是标准分布,R 中不存在可从中采样的函数。如何使用 R 从这个 pdf 中采样?

最佳答案

这更像是一个统计问题,因为它需要抽样,但总的来说,您可以采用这种方法来解决问题:

  • 查找分布 f ,其 pdf,当乘以任何给定的常数 k , 始终大于相关分布的 pdf,g .
  • 对于每个样本,执行以下步骤:
  • 采样一个随机数 x来自分布 f .
  • 计算 C = f(x)*k/g(x) .这应该等于或小于 1。
  • 画一个随机数 u来自均匀分布 U(0,1)。如 C < u ,然后返回第 3 步。否则保留 x作为数字并根据需要继续采样。

  • 这个过程被称为拒绝采样,通常用于不均匀的随机数生成器。

    正态分布和均匀分布是一些更常见的抽样分布,但您可以做其他一些。一般你想要 k*f(x)的形状和 g(x)非常接近,因此您不必拒绝大量 sample 。

    这是一个示例实现:
    #n is sample size
    #g is pdf you want to sample from
    #rf is sampling function for f
    #df is density function for f
    #k is multiplicative constant
    #... is any necessary parameters for f
    function.sample <- function(n,g,rf,df,k,...){
    results = numeric(n)
    counter = 0
    while(counter < n){
    x = rf(1,...)
    x.pdf = df(x,...)
    if (runif(0,1) >= x.pdf * k/g(x)){
    results[counter+1] = x
    counter = counter + 1
    }
    }
    }

    还有其他方法可以进行随机抽样,但这通常是最简单的方法,并且它适用于大多数函数(除非它们的 PDF 难以计算但它们的 CDF 不是)。

    关于r - 如何从自定义分布中采样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28627487/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com