在R中生成随机矩阵,其中每行的总和等于1

时间:2017-04-01 11:56:25

标签: r

我想在R软件中生成一个矩阵(4行和30列),带有随机元素,按0到1之间的元素范围,每行的总和等于1.

2 个答案:

答案 0 :(得分:3)

这是基于softmax(多项logit)变换的解决方案。

m <- matrix(rnorm(4 * 30), nrow=30)
prob <- exp(m)/rowSums(exp(m))

rowSums(prob)
#[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

all(prob > 0 & prob < 1)
#[1] TRUE

答案 1 :(得分:1)

如果您在[0,1]中选择n个数字总和为1,则实际上选择了n-1个断点。您可以选择断点,然后向后搜索数字:

rand.sum <- function(n){
  x <- sort(runif(n-1))
  c(x,1) - c(0,x)
}

然后

t(replicate(4,rand.sum(30)))

将是一个4x30的随机数矩阵,其中eaxch行总和为1。