Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 从密度对象(或更广泛地从一组数字)生成随机数_R_Random - Fatal编程技术网

R 从密度对象(或更广泛地从一组数字)生成随机数

R 从密度对象(或更广泛地从一组数字)生成随机数,r,random,R,Random,假设我有一组数字,我怀疑它们来自同一个分布 set.seed(20130613) x <- rcauchy(10) 我的问题如下: 有没有更好(或内置于R中)的方法从密度对象生成随机数 关于如何从一组数字中生成随机数(除了sample)还有其他想法吗 如果您只需要从现有的数字池中提取值,那么sample就是一种方法。 如果您想从假定的基础分布中提取,则使用密度,并将其与假定的分布相匹配,以获得必要的系数(平均值、sd等),并使用适当的R分布函数 除此之外,我还要看一看C中数字配方的第7.

假设我有一组数字,我怀疑它们来自同一个分布

set.seed(20130613)
x <- rcauchy(10)
我的问题如下:

  • 有没有更好(或内置于R中)的方法从密度对象生成随机数
  • 关于如何从一组数字中生成随机数(除了
    sample
    )还有其他想法吗

  • 如果您只需要从现有的数字池中提取值,那么
    sample
    就是一种方法。
    如果您想从假定的基础分布中提取,则使用
    密度
    ,并将其与假定的分布相匹配,以获得必要的系数(平均值、sd等),并使用适当的
    R
    分布函数

    除此之外,我还要看一看C中数字配方的第7.3章(“拒绝方法”),了解根据任何分布“选择性”取样的方法。代码非常简单,很容易翻译成
    R

    我打赌有人已经这样做了,并且会发布比这更好的答案。

    要从密度估计中生成数据,您只需随机选择一个原始数据点,并根据密度估计中的内核添加一个随机“错误”块,默认为“高斯”这只意味着从原始向量中选择一个随机元素,并添加一个平均值为0且sd等于所用带宽的随机法线:

    den <- density(x)
    
    N <- 1000
    newx <- sample(x, N, replace=TRUE) + rnorm(N, 0, den$bw)
    

    Greg Snow的回答对我很有帮助,我意识到密度函数的输出包含了从输入分布创建随机数所需的所有数据。在他的示例的基础上,您可以执行以下操作,以使用密度输出获得随机值

    x <- rnorm(100)   # or any numeric starting vector you desire
    dens <- density(x)
    N <- 1000
    newx <- sample(x = dens$x, N, prob = dens$y, replace=TRUE) + rnorm(N, 0, dens$bw)
    

    x这背后的理论要微妙得多。如何估计密度?使用哪个内核?这个估计值是否有置信区间?这可能是一种混合模式吗?等
    
    x <- rnorm(100)   # or any numeric starting vector you desire
    dens <- density(x)
    N <- 1000
    newx <- sample(x = dens$x, N, prob = dens$y, replace=TRUE) + rnorm(N, 0, dens$bw)
    
    rdensity <- function(n, dens) {
        return(sample(x = dens$x, n, prob = dens$y, replace=TRUE) + rnorm(n, 0, dens$bw))
    }