Je souhaite générer une matrice (4 lignes et 30 colonnes) dans le logiciel R, avec des éléments aléatoires, par plage des éléments compris entre 0 et 1, dont la somme de chaque ligne est égale à 1.Générer une matrice aléatoire dans R dont la somme de chaque ligne est égale à 1
1
A
Répondre
1
Si vous choisissez n
nombres dans [0,1] qui somme à 1 vous êtes en effet choisir n-1
des points d'arrêt. Vous pouvez choisir les points d'arrêt puis travailler à rebours pour les chiffres:
rand.sum <- function(n){
x <- sort(runif(n-1))
c(x,1) - c(0,x)
}
Et puis
t(replicate(4,rand.sum(30)))
sera une matrice de 4x30 de nombres aléatoires où eaxch sommes des lignes à 1.
3
Voici une solution basée sur la transformation softmax (logit multinomial).
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
Merci beaucoup pour votre réponse. – Sharon