2016-12-23 4 views
0

Ich möchte eine Matrix in R mit Element [-1,0,1] mit Wahrscheinlichkeit [1/6, 2/3, 1/6] jeweils erstellen. Die Wahrscheinlichkeit kann sich während der Laufzeit ändern. für statische Wahrscheinlichkeit habe ich die Ausgabe, aber das Problem ist dynamische Änderung der Wahrscheinlichkeit. Zum Beispiel, wenn ich eine Matrix für die obige Wahrscheinlichkeit mit [sqrt (3), 0, -sqrt (3)] erstellen, ist die erforderliche Ausgabe.Wie erstellt man eine Matrix mit Wahrscheinlichkeitsverteilung in R

Hinweis: Die Wahrscheinlichkeit sollte nicht wie erwähnt statisch sein. Es kann während der Laufzeit variieren.

Bitte helfen Sie, dies zu lösen.

enter image description here

Antwort

3

Angenommen, Sie eine 2x3-Matrix wollen:

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

So können Sie aus den Werten probieren Sie wollen, mit in prob definierten Wahrscheinlichkeiten. Dies ist nur ein Vektor, aber Sie können es in eine Matrix der gewünschten Form mit matrix danach machen. Ersetzen Sie die Wahrscheinlichkeiten durch eine Variable anstelle von Werten, um sie nicht statisch zu machen.

Wenn die Zahlen sollten nach einem bestimmten Schema verteilt werden, anstatt zufällig gezogen nach einer Wahrscheinlichkeit, replizieren die Vektorelemente und mischt sie:

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

Vielen Dank @mpjdem, aber die Ausgabe gibt 3 Nullen, 2 (-1) und 1 (+1). Ich brauche 4 Nullen nach Bedingung – Siddhu

+2

Es ist eine Wahrscheinlichkeit, also ist es nicht deterministisch. Für das, was Sie wollen, benötigen Sie die Funktion "rep" mit dem Argument "Times" und verwenden dann "sample", um sie zu mischen. Ich werde es schnell aufschreiben. – mpjdem

+0

Ja, ich verstehe, danke – Siddhu

1

Sie können diese versuchen, eine mxn Matrix zu erzeugen:

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

Vielen Dank @sandipan für die ausführliche Antwort. – Siddhu

+0

herzlich willkommen @Siddhu –

Verwandte Themen