2017-05-10 79 views
1

我需要用rbinom生成隨機數,但我需要在範圍內排除0。使用rbinom生成隨機數,但排除範圍內的0

我該怎麼辦?

我想類似的東西:

k <- seq(1, 6, by = 1) 

binom_pdf = dbinom(k, 322, 0.1, log = FALSE) 

但我需要得到所有相關數據集,因爲如果我做到以下幾點:

binom_ran = rbinom(100, 322, 0.1) 

我得到的值從0到100。

有什麼辦法可以解決這個問題嗎?

由於

+0

獲得0的概率將取決於您的第二個和第三個參數。你需要固定參數進行模擬嗎? – R18

+0

是的不幸... – aaaaa

+0

的事情是,如果我們只知道用於生成binom_pdf的觀測數量,我們可以通過它乘以密度值 – aaaaa

回答

3

突然想到假設我們有固定參數:

  • Ñ:生成值
  • 小號的數目:該實驗的大小
  • p:成功的概率

    # Generate initial values 
        U<-rbinom(n,s,p) 
        # Number and ubication of zero values 
        k<-sum(U==0) 
        which.k<-which(U==0) 
    
    # While there is still a zero, . . . generate new numbers 
        while(k!=0){ 
        U[which.k]<-rbinom(k,s,p) 
         k<-sum(U==0) 
         which.k<-which(U==0) 
        # Print how many zeroes are still there 
         print(k) 
    } 
    
    # Print U (without zeroes) 
        U 
    
1

除了命中和未命中的方法,如果你想從給定的是成功的次數至少是一個二項式的條件分佈來樣,你可以計算條件分佈,然後直接採樣從中。

這是很容易計算出,如果X是二項式與參數pn,然後

P(X = x | X > 0) = P(X = x)/(1-p) 

因此,下面的函數將工作:

rcond.binom <- function(k,n,p){ 
    probs <- dbinom(1:n,n,p)/(1-p) 
    sample(1:n,k,replace = TRUE,prob = probs) 
} 

如果你要調用以上函數多次使用相同的np,那麼你可以預先計算矢量probs並簡單地使用函數的最後一行只要你需要它。

我沒有基準,但我懷疑是打了小姐的做法是最好的時候k小,p不要太靠近0,n大,但對於較大k較大,p接近0 ,並且n更小,那麼上述可能是優選的。

相關問題