我有分发版的pdf。该分布不是标准分布,R中没有函数可以从中进行采样。如何使用R?
从这个pdf中提取样本答案 0 :(得分:0)
这更像是一个统计问题,因为它需要抽样,但总的来说,你可以采用这种方法解决问题:
查找分布f
,其pdf乘以任何给定的常量k
时,总是大于相关分布的{pdmp,g
。
对于每个样本,请执行以下步骤:
从分发x
中抽取随机数f
。
计算C = f(x)*k/g(x)
。这应该等于或小于1.
从均匀分布U(0,1)中绘制一个随机数u
。如果是C < u
,请返回步骤3.否则请将x
作为号码,并根据需要继续提取。
此过程称为拒绝抽样,通常用于不均匀的随机数生成器。
正态分布和均匀分布是一些比较常见的分布,但你可以做其他分布。通常,您希望k*f(x)
和g(x)
的形状非常接近,因此您不必拒绝大量样本。
以下是一个示例实现:
#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不是很好)。