Сгенерируйте матрицу с iid нормальными случайными величинами, используя R

Есть ли способ сгенерировать набор данных с нормально распределенными случайными значениями в R без использования цикла? Каждая запись будет представлять собой независимую случайную величину с нормальным распределением.


person Crawling Antz    schedule 24.07.2012    source источник
comment
matrix(rnorm(n*p),n) для матрицы $n \times p$ с iid $\mathcal N(0,1)$ элементами.   -  person cardinal    schedule 25.07.2012


Ответы (4)


Чтобы создать матрицу N на M из нормальных случайных величин iid, введите следующее:

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

настроить среднее значение и стандартное отклонение по желанию.

person Macro    schedule 24.07.2012
comment
Пока спрашивающий понимает, что N — это количество строк, а M — количество столбцов, этот ответ будет ему полезен. - person IRTFM; 25.07.2012
comment
@DWin, согласен. Это общепринятое обозначение при обращении к матрицам в любом контексте, верно? - person Macro; 25.07.2012
comment
Я не совсем уверен. Я знаю, что люди иногда выражают удивление по поводу того факта, что матрицы R заполняются в порядке столбцов вызовами matrix, если byrow=TRUE. Это навело меня на мысль, что в разных языках могут быть различия в матричных соглашениях. - person IRTFM; 25.07.2012
comment
для matrix можно указать один из nrow или ncol - person qwr; 01.05.2021

пусть mu будет вектором средств, а sigma вектором стандартных разработчиков.

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)

создаст матрицу со столбцами, содержащими соответствующие выборки

person shhhhimhuntingrabbits    schedule 24.07.2012

Ты можешь использовать:

replicate(NumbOfColumns,rnorm(NumbOfLines))

Вы можете заменить rnorm другой функцией распределения, например runif, чтобы сгенерировать матрицы с другими распределениями.

person Guilherme Salomé    schedule 11.05.2015

Примечание: каждая запись независима. Таким образом, вы не можете избежать использования циклов for, потому что вы должны вызывать rnorm один раз для каждой независимой переменной. Если вы просто вызовете rnorm(n*m), это n*m выборок из одной и той же случайной величины!

person Oddsun    schedule 11.04.2013
comment
это неправильно и сбивает с толку ... rnorm(n*m) действительно генерирует n*m независимые случайные выборки точно так, как запросил OP. - person Ben Bolker; 11.04.2013