2012-07-24 5 views
16

Gibt es einen Weg, um einen Datensatz mit normalverteilte Zufallswerten in R zu erzeugen, ohne eine Schleife unter Verwendung von? Jeder Eintrag würde eine unabhängige Zufallsvariable mit einer normalen Verteilung darstellen.Matrix mit iid normaler Zufallsvariablen R

+6

'Matrix (rnorm (n * p), n) für eine' \ times p $ $ n Matrix mit iid $ \ mathcal N (0,1) $ Einträge. – cardinal

Antwort

21

produzieren, um eine N durch M Matrix von IId normalen Zufalls zu erstellen Variablen geben Sie dies ein:

matrix(rnorm(N*M,mean=0,sd=1), N, M) 

zwicken Sie den Mittelwert und Standard d Abweichung wie gewünscht.

+0

Solange die Fragesteller verstehen, dass N die Anzahl der Zeilen und M die Anzahl der Spalten ist, dann wird er auch von dieser Antwort –

+0

@DWin, vereinbart serviert werden. Das ist die konventionelle Notation, wenn man sich in irgendeinem Zusammenhang auf Matrizen bezieht, oder? – Macro

+0

Ich bin nicht wirklich sicher. Ich weiß, dass die Leute sich manchmal darüber wundern, dass die Matrizen von R in Spalte-Großordnung mit Aufrufen von "Matrix" gefüllt sind, es sei denn, byrow = TRUE. Das hat mich dazu gebracht zu glauben, dass es Unterschiede in den Matrixkonventionen in verschiedenen Sprachen geben könnte. –

2

let mu ein Vektor von Mitteln und sigma ein Vektor von Standard-Entwickler sein

mu<-1:10 
sigma<-10:1 
sample.size<-100 
norm.mat<-mapply(function(x,y){rnorm(x,y,n=sample.size)},x=mu,y=sigma) 

würde eine Matrix mit Spalten Halten der entsprechenden Proben

+0

Danke, das funktioniert. @ cardinals Lösung ist viel einfacher. –

-2

Hinweis: Jeder Eintrag ist unabhängig. Sie können also die Verwendung von for-Schleifen nicht vermeiden, da Sie rnorm für jede unabhängige Variable einmal aufrufen müssen. Wenn Sie nur rnorm (n * m) nennen, das ist die n * m Proben aus dem gleichen Zufallsvariable!

+0

das ist falsch und verwirrend ... 'rnorm (n * m)' * erzeugt * 'n * m' ** unabhängige ** Stichproben, genau wie das OP angefordert. –

1

können Sie verwenden:

replicate(NumbOfColumns,rnorm(NumbOfLines)) 

Sie rnorm mit anderer Verteilungsfunktion ersetzen können, zum Beispiel runif, Matrizen mit anderen Distributionen zu erzeugen.