我想模拟矩阵每列的数字0和1的二项分布。每列的成功概率都会发生变化。第1列的成功概率为1/ncol(matrix)
。第2列的成功概率为2/ncol(matrix)
。
我尝试了几种不同的方法来生成我正在寻找的数据,但是我要么得到第1列的警告或数字列表而不是整个矩阵。
更好的是能够使用概率矩阵而不是像1 / ncol(矩阵)这样的东西。
假设我想要一个200行乘1000列的矩阵。对于每一列,我想使用概率矩阵中的元素定义的概率生成0和1的二项分布。在第1列中获得1的概率由概率矩阵的第一个元素定义,并且是.001。在第2列中获得1的概率由概率矩阵的第二个元素定义,并且是.002等。我不确定我是否应该在rbinom()
内或matrix()
内进行apply()
datasim = matrix(0, nrow=200, ncol=1000)
colnames(datasim) = c(1:1000)
prob.matrix = as.matrix(c(1:1000))
prob.matrix = prob.matrix/1000
newdatasim = apply(???, 2, function(x) { rbinom(??, 1, prob.matrix)})
或其他。
{{1}}
请帮助,谢谢!
答案 0 :(得分:4)
使用prob.matrix
作为向量比使用矩阵更简单。这是一个较小的例子:
sapply(1:10/10,function(p) rbinom(20,1,p))
如果你想预先分配一个矩阵......
set.seed(42)
datasim <- matrix(,20,10)
datasim[,] <- sapply(1:10/10,function(p) rbinom(20,1,p))
给出了
datasim
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 1 0 1 1 0 1 1 0 1
[2,] 1 0 0 1 0 1 1 1 1 1
[3,] 0 1 0 1 0 1 1 1 1 1
[4,] 0 1 1 0 1 1 1 1 1 1
[5,] 0 0 0 1 1 0 0 1 1 1
[6,] 0 0 1 0 1 0 1 0 1 1
[7,] 0 0 1 0 0 0 0 1 1 1
[8,] 0 1 0 1 0 0 0 0 1 1
[9,] 0 0 1 1 0 1 1 1 1 1
[10,] 0 1 0 0 0 1 0 1 1 1
[11,] 0 0 0 0 1 0 0 1 1 1
[12,] 0 1 0 0 0 0 1 1 1 1
[13,] 1 0 0 0 0 0 1 1 1 1
[14,] 0 0 1 0 1 1 0 1 1 1
[15,] 0 0 0 0 1 1 0 1 1 1
[16,] 1 1 1 1 1 1 1 1 1 1
[17,] 1 0 0 0 0 1 0 1 1 1
[18,] 0 0 0 0 1 1 1 1 1 1
[19,] 0 1 0 0 1 0 0 1 1 1
[20,] 0 0 0 0 1 0 1 1 1 1
答案 1 :(得分:1)
#Generate matrix with 200 rows x 1000 columns
#Each column has a binomial distribution of 0's and 1's
#The probability is determined by the column number divided by the total number of columns
datasim = matrix(0, nrow=200, ncol=100)
datasim[1:10,1:10]
probmatrix = col(datasim)/1000
probmatrix[1:10,1:10]
datasim2 = matrix(rbinom(200 * 1000,1,probmatrix), nrow=200, ncol=1000, byrow=FALSE)
datasim2[1:10,1:10]