【问题标题】:R-How to generate random sample of a discrete random variables?R-如何生成离散随机变量的随机样本?
【发布时间】:2025-02-26 22:30:01
【问题描述】:

在 R 中,我想生成离散随机变量的随机样本:X,其中:P(X=a)=P(X=-a)=1/2。我一直在网上搜索一个功能,但似乎没有直接的功能可以做到这一点。

【问题讨论】:

    标签: r binary-data random-sample


    【解决方案1】:

    1) 如果你使用sample,这就足够了:

    sample(c(-a,a),1)

    例如:

     a <- 10
     sample(c(-a,a),1)
    [1] -10
    

    尝试另一对:

    > sample(c(-a,a),1)
    [1] -10
    > sample(c(-a,a),1)
    [1] 10
    

    工作。

    如果需要对多个元素进行采样,则设置replace=TRUE ...这里我们采样12次:

     sample(c(-a,a),12,replace=TRUE)
    
     [1]  10  10 -10  10  10  10 -10 -10  10 -10  10 -10
    

    2) 你可以使用runif;这是一个 9 号的样本:

    a <- 1
    ifelse(runif(9)<.5,-a,a)
    
    [1] -1  1 -1  1 -1  1 -1  1  1  
    

    3) 你可以使用rbinom;这是一个大小为 4 的样本:

    a <- 6
    ifelse(rbinom(4,1,.5),-a,a)
    
    [1] -6  6 -6  6
    

    【讨论】:

      【解决方案2】:

      我认为您正在寻找生成伯努利随机变量的样本。伯努利随机变量是二项式随机变量的特例。因此,您可以尝试rbinom(N,1,p)。这将生成N 样本,其值为1,概率为p,值为0,概率为(1-p)。要获取a-a 的值,您可以使用a*(2*rbinom(N,1,p)-1)

      【讨论】:

        【解决方案3】:
        index <- sample(1,c(1,2),replace=T)
        if (index == 1) {xx = a} else {xx = -a}
        

        每个分布生成过程都从使用 $\text{uniform}(0,1)$ 开始。由于使用 $\text{uniform}(0,1)$ 更容易生成离散分布,因此人们不会为它们封装函数。但是,您可以编写自己的函数,然后在下次使用它们时再使用它们。

        【讨论】:

          【解决方案4】:

          或者这个:

          > n=10
          > X=rep(0,n)
          > Y=rbinom(n,1,1/2)
          > #Since they the probability is 1/2 for both cases, I assigned "a" when Y=1 and "-a" otherwise.
          > X[Y==1]="a"
          > X[Y==0]="-a"
          > X
           [1] "a"  "-a" "a"  "a"  "a"  "-a" "a"  "-a" "-a" "-a"
          > Y
           [1] 1 0 1 1 1 0 1 0 0 0
          > 
          

          【讨论】: