Использование mvrnorm из МАССОВОГО пакета

#r

#r

Вопрос:

Мне нужно сгенерировать случайную выборку с многомерным нормальным распределением, используя seed(12346) 100 столбцов и 5000 строк.

Пока у меня есть это:

 set.seed(12346) 
Preg1 <- data.frame(MASS::mvrnorm(n=5000,mu=c(0,0,0),Sigma = diag(3)))
  

Приведенное выше дает мне три столбца, как я могу получить 100?

Я не могу понять, как получить вектор mu со 100 нулями, не вводя их, и тогда сигма будет равна Sigma = diag(100)

Комментарии:

1. Может mu = rep(0, 100) быть?

Ответ №1:

Вы можете использовать mu = rep(0, 100) . rep Функция используется для повторения значений.

 set.seed(12346)
ncol = 100
Preg1<-data.frame(mvrnorm(n = 5000, mu = rep(0, ncol), Sigma = diag(ncol)))

dim(Preg1)
# [1] 5000  100
  

rep Функция весьма полезна, ее можно использовать различными способами, которые здесь неприменимы, но о которых полезно знать:

 rep(c("A", "B", "C"), times = 3)
# [1] "A" "B" "C" "A" "B" "C" "A" "B" "C"

rep(c("A", "B", "C"), times = 1:3)
# [1] "A" "B" "B" "C" "C" "C"

rep(c("A", "B", "C"), each = 3)
# [1] "A" "A" "A" "B" "B" "B" "C" "C" "C"
  

В данном конкретном случае, поскольку ваша Sigma идентификационная матрица, каждый столбец фактически независим. Таким образом, было бы эквивалентно генерировать каждый столбец (или даже каждый рисунок) независимо, что мы могли бы сделать любым из этих способов:

 x = replicate(n = ncol, rnorm(5000))
dim(x)
# [1] 5000  100

z = matrix(rnorm(5000 * ncol), ncol = ncol)
dim(z)
# [1] 5000  100