2016-12-23 1 views
0

Je veux créer une matrice dans R avec l'élément [-1,0,1] avec probabilité [1/6, 2/3, 1/6] respectivement. La probabilité peut changer pendant l'exécution. pour la probabilité statique, j'ai la sortie mais le problème est le changement dynamique de la probabilité. Par exemple, si je crée une matrice pour la probabilité ci-dessus avec [sqrt (3), 0, -sqrt (3)], la sortie requise est.Comment créer une matrice avec une distribution de probabilité dans R

Remarque: La probabilité ne devrait pas être statique comme mentionné. Cela peut varier pendant l'exécution.

Aider à résoudre ce problème.

enter image description here

Répondre

3

Supposons que vous voulez une matrice 2x3:

matrix(sample(c(-1,0,1), size=6, replace=TRUE, prob=c(1/6,2/3,1/6)), nrow=2) 

Vous échantillon à partir des valeurs que vous voulez, avec des probabilités définies dans prob. Ceci est juste un vecteur, mais vous pouvez le faire dans une matrice de la forme désirée en utilisant matrix ensuite. Remplacer les probabilités par une variable au lieu de valeurs pour ne pas le rendre statique.

Si les numéros doivent être répartis selon un certain schéma plutôt que tiré au hasard selon une probabilité, reproduire les éléments vectoriels et les mélanger:

matrix(sample(rep(c(-1,0,1), times=c(1,4,1))), nrow=2) 
+0

Merci @mpjdem, mais la sortie donne 3 zéros, 2 (-1) et 1 (+1). J'ai besoin de 4 zéros selon la condition – Siddhu

+2

C'est une probabilité, donc ce n'est pas déterministe. Pour ce que vous voulez, vous aurez besoin de la fonction 'rep' avec l'argument' times', puis utilisez 'sample' pour le mélanger. Je vais rapidement l'écrire. – mpjdem

+0

Ouais je comprends, je vous remercie – Siddhu

1

Vous pouvez essayer cela pour générer une matrice de MXN:

sample.dynamic.matrix <- function(pop.symbols, probs, m, n) { 
    samples <- sample(pop.symbols, m*n, prob = probs, replace=TRUE) 
    return(matrix(samples, nrow=m)) 
} 

set.seed(123) 
sample.dynamic.matrix(-1:1, c(1/6,2/3,1/6), 2, 3) 
#  [,1] [,2] [,3] 
#[1,] 0 0 -1 
#[2,] 1 -1 0 
+0

Merci @sandipan pour la réponse élaborée. – Siddhu

+0

les bienvenus @Siddhu –