【问题标题】:R generate clustered pseudo-random numbersR生成聚集的伪随机数
【发布时间】:2016-02-27 11:16:13
【问题描述】:

在 R 中:我试图找出一种方法来生成值为 0 或 1 的向量。与其从均匀分布中独立地绘制每个 0 和 1,我希望 1 聚集在一起,例如(1,0,0,0,0,0,1,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,...)。最简单的形式是:“如果之前的数字是 1,则增加抽到 1 的可能性”。或者使抽到 1 的机会取决于最后抽到的 5 个数字的总和。有没有一种有效的方法可以做到这一点,甚至可能是一个包。会让人想起带有变量probrbinom(n,1,prob)

【问题讨论】:

  • 只是一个想法,可能会生成一系列序列,随机或交替地全为 0 或全为 1,其长度由概率分布(正态、泊松等)给出。然后将它们连接在一起。您将能够指定长度,并且您将根据您选择的概率得到分布的簇长度

标签: r random numbers


【解决方案1】:

您可以使用循环尝试以下方法。首先,您可以使用示例创建一个名为“x”的变量,该变量将分配初始值 0 或 1。

在循环中,您可以再次使用示例函数,但这次您将值分配给 prob 选项。为此,我将概率设置为 70/30 拆分(即,如果您之前的数字是 0,那么如果您之前的值是 1,那么下一个数字有 70% 的机会是 0,反之亦然。)

x = sample(c(0,1),1)
for(i in 2:100){
  if(x[i-1] == 0){
    x[i] = sample(c(0,1),1,prob=c(0.7,0.3))
  } else {
    x[i] = sample(c(0,1),1,prob=c(0.3,0.7))
  }
}

x[1:20]
[1] 1 1 1 0 0 0 0 0 1 1 1 0 1 0 0 0 1 1 0 0

【讨论】:

    【解决方案2】:

    所以我从 Colin Charles 那里获得了很好的灵感,并添加了一些可调整性。显然有很多方法可以计算概率,因为它受到先前抽签的影响。我最终使用了最后一次w 绘制之和的截止值m 来确定是对每个0/1 使用低概率p0 还是使用高概率p1 来制作长度为l 的向量。

    f <- function (l, w, m, p0, p1){
    
      v = rbinom(w,1,p0) #Initilize with p0
    
        for (i in w:(l-1)){
          v[i+1] <- ifelse(sum(v[(i-w+1):i]) > m, 
                           rbinom(1,1,p1),  
                           rbinom(1,1,p0))
        }
    
        return(v)
      }
    
    #Test:
    set.seed(8)
    plot(f(100, 5, 1, 0.1, 0.6)) #Clustered
    plot(f(100, 5, 2, 0.1, 0.4)) #Less clustered
    

    给予:

    和(较少聚集):

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 2011-09-16
      • 2014-05-18
      • 2012-02-12
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 2018-03-20
      相关资源
      最近更新 更多