簡體   English   中英

R中多個二項式隨機數的模擬

[英]Simulation of multiple binomial random numbers in R

我有以下算法

步驟1.生成X1 = x1~Bin(6,1 / 3)

步驟2.生成X2 | X1 = x1~bin(6-x1,(1/3)/(1-1 / 3))

步驟3.生成X3 | X1 = x1,X2 = x2~Bin(6-x1-x2,(1/3)/(1-1 / 3-1 / 3))

步驟4.重復步驟1-3 N次。

以下是我在R中實現此算法的方法:

mult_binom<-function(n) #n=6
{
  n=1000
  random_vectors<-Matrix(0,n,3)

  for(i in 1:n){

    X1<-rbinom(n,3,1/3) 

    X2<-rbinom(n-X1,3,(1/3)/(1-(1/3)))

    X3<-rbinom(n-X1-X2,3,(1/3)/(1-(1/3)-(1-3)))


    arr<-c(X1,X2,X3)


  }
  for(j in 1:n){

    random_vectors[j]<-arr[j]
  }
  return(random_vectors)
}

將函數調用為mult_bin(6)產生下面的矩陣類似的矩陣

1000 x 3 sparse Matrix of class "dgCMatrix"

  [1,] 1 . .
  [2,] 1 . .
  [3,] 1 . .
  [4,] 2 . .
  [5,] 1 . .
  [6,] 1 . .
  [7,] 1 . .
  [8,] . 3 .

並繼續[1000,]

我沒想到這個結果。

為什么有點?

我做錯了什么?

您的實施中存在多個錯誤。 最重要的一點是rbinom的第一個參數不是二項分布中的參數n ,而是您想要生成的隨機數的數量。

這是我的解決方案。 我的功能只返回實驗。 然后我使用replicate返回多個(在我的情況下為5)實驗的結果:

myfun <- function(){

  x1 <- rbinom(1, 6, 1/3) 
  x2 <- rbinom(1, 6 - x1, (1/3)/(1-(1/3)))
  x3 <- rbinom(1, 6 - x1 - x2, (1/3)/(1-(1/3)-(1/3)))

  return(c(X1 = x1, X2 = x2, X3 = x3))  
}

    set.seed(1)
    replicate(5, myfun())
   [,1] [,2] [,3] [,4] [,5]
X1    1    4    4    0    3
X2    2    0    1    2    1
X3    3    2    1    4    2

在此輸出中,每列都是一次實驗的結果。 您可以看到數字總是加起來為6.另請注意,我使用set.seed設置隨機種子。 這可確保您的結果可重現。

在輸出中出現點,因為您使用Matrix包創建Matrix對象而不是使用“普通”矩陣。 通常你創建一個矩陣matrix不是Matrix

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM