R生成聚类伪随机数

时间:2015-11-24 20:42:16

标签: r random numbers

在R中:我试图找出一种方法来生成值为0或1的向量。而不是从均匀分布中独立地绘制每个0和1,我希望1s成为聚类,例如(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个数字的总和。有没有一种有效的方法,甚至可能是一个包。会让人联想到rbinom(n,1,prob)变量prob

2 个答案:

答案 0 :(得分:1)

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

在循环中,您可以再次使用样本函数,但这次为prob选项指定值。为此,我将概率设置为70/30分割(即如果您之前的数字为0,则下一个数字为0的可能性为70%,反之亦然,如果之前的值为1。)< / p>

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

答案 1 :(得分:0)

所以我从Colin Charles那里获得了很好的灵感,并增加了一些可调节性。显然有很多方法可以计算概率,因为它受到先前抽取的影响。我最后使用了最后m绘制总和的w来确定是否为每个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

给出:

Clustered

和(较少聚集):

less-clustered