根据复制的二项式分布比例制作每行两个变量的矩阵

Make a matrix of two variables each row from replicating binomial distribution proportion

所以...我有一些问题...

我正在使用 R 模拟 n=10 和 p=0.6、大小为 1 的二项分布,然后计算我得到了多少个 1 和 0,这个模拟应该重复 200 次,从而取一个200行2列的矩阵,第一列1的个数,第二列0的个数

我定义了一个函数:

binom10.2 <- function(i){
  x <- rbinom(10,1,0.6)
  y <- as.vector(table(x))
  return(y)
}

这给了我这样的结果:

> binom10.2(i)
[1] 5 5
> binom10.2(i)
[1] 7 3
> binom10.2(i)
[1] 5 5
> binom10.2(i)
[1] 4 6

我需要这个结果,在矩阵中复制 200 次,如下所示:

     [,1] [,2]
  [1,]    1    9
  [2,]    7    3
  [3,]    5    5
  [4,]    4    6
  [5,]    2    8
  [6,]    5    5
  [7,]    4    6
  [8,]    4    6
  [9,]    5    5
 [10,]    3    7
 [11,]    1    9
 [12,]    3    7
 [13,]    4    6
 [14,]    5    5
 [15,]    2    8

问题是,我写这段代码是为了得到它:

proportions10 <- t(sapply(1:200, binom10.2)
proportions10 <- t(replicate(200, binom10.2(i)))

我认为这两种方式是相同的,但是,当 运行同时使用这两种方式时,我有时会得到所需的矩阵,有时会得到一个列表,如下所示:

     [,1]      [,2]      [,3]      [,4]      [,5]      [,6]      [,7]      [,8]      [,9]      [,10]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,11]     [,12]     [,13]     [,14]     [,15]     [,16]     [,17]     [,18]     [,19]     [,20]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,21]     [,22]     [,23]     [,24]     [,25]     [,26]     [,27]     [,28]     [,29]     [,30]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,31]     [,32]     [,33]     [,34]     [,35]     [,36]     [,37]     [,38]     [,39]     [,40]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,41]     [,42]     [,43]     [,44]     [,45]     [,46]     [,47]     [,48]     [,49]     [,50]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,51]     [,52]     [,53]     [,54]     [,55]     [,56]     [,57]     [,58]     [,59]     [,60]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,61]     [,62]     [,63]     [,64]     [,65]     [,66]     [,67]     [,68]     [,69]     [,70]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,71]     [,72]     [,73]     [,74]     [,75]     [,76]     [,77]     [,78]     [,79]     [,80]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,81]     [,82]     [,83]     [,84]     [,85]     [,86]     [,87]     [,88]     [,89]     [,90]    
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,91]     [,92]     [,93]     [,94]     [,95]     [,96]     [,97]     [,98]     [,99]     [,100]   
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,101]    [,102]    [,103]    [,104]    [,105]    [,106]    [,107]    [,108]    [,109]    [,110]   
[1,] Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2 Integer,2
     [,111]    [,112]    [,113]    [,114]    [,115]    [,116]    [,117]    [,118]    [,119]    [,120]   

对我来说,有时候,根据我 运行 代码的次数,我得到了第一个所需的矩阵,而在其他时候,我得到了第二个列表,这毫无意义。我希望第一个矩阵总是出现,无论我 运行 代码多少次...

有人能帮忙吗?

1 的总和显示每次复制的成功次数。从 10 中减去该数字得出失败的数字。

这是我的方法:

 x = replicate(200, expr={sum(rbinom(10, 1, .6))})
 m = matrix(0, nrow=200, ncol=2)
 m[,2]=x
 m[,1]=10-x

试试这个:

# define parameters
n <- 10     # number of trials
p <- 0.6    # probability of success
nexp <- 200 # number of experiments

# run the simulation
res <- replicate(200, rbinom(1, size=n, prob=p))
cbind(res, n-res)

获取输出:

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

这里不需要replicaterbinom(n, size, prob) 直接给你 n 独立试验的成功次数。您需要 n = 200 个观察结果:每个观察结果都是 size = 10 的试验,而 prob0.6

r <- rbinom(200, 10, 0.6)

由于您希望在矩阵中使用第二列 = 观察到的零数:从 10 中减去 r 以获得第二列:

bin10.2 <- matrix(c(r, 10 - r), nrow = 200)