2015-11-24 124 views
0

在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个数字的总和。有没有这样做的有效方式,甚至可能是一个包。会让人想起rbinom(n,1,prob)变量probR生成聚簇的伪随机数

+0

只是一个想法,也许产生一系列的序列,随机地或交替地或者全部为0或全部1,其长度由概率分布(正态,泊松等)给出。然后将它们连接在一起。您将能够规定长度,并根据您选择的概率分配群集长度 – Chris

回答

1

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

在循环内您可以再次使用样本函数,但是这次您将值分配给prob选项。为此,我将概率设置为70/30分割(即,如果您以前的数字为0,则下一个数字为0时有70%的概率,反之亦然,如果您以前的值为1)。

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 
0

所以我从科林查尔斯那里得到了很好的灵感,并增加了一些可调整性。计算概率显然有很多方法受到先前抽签的影响。我最后使用最后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 

给出:

Clustered

和(较少聚集):

less-clustered