2015-11-24 189 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