所以......我有一些问题......
使用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]
对我而言,根据我运行代码的次数,我得到第一个所需的矩阵,而其他一些时间,我得到第二个列表,没用。我想第一个矩阵总是出现,无论我运行代码多少次......
有人可以帮忙吗?
答案 0 :(得分:1)
试试这个:
# 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
答案 1 :(得分:0)
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
答案 2 :(得分:0)
这里不需要replicate
。 rbinom(n, size, prob)
直接为您提供n
次独立审判的成功次数。您需要n = 200
观察:每次观察都是size = 10
的试用,而prob
是0.6
。
r <- rbinom(200, 10, 0.6)
由于您希望在矩阵中使用第二列=观察到的零数:从10减去r
以获得第二列:
bin10.2 <- matrix(c(r, 10 - r), nrow = 200)