在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
。
答案 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
给出:
和(较少聚集):