#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