Как генерировать многомерные нормальные данные в R? - PullRequest
1 голос
/ 31 января 2020

Я завершаю задание, в котором мне нужно сгенерировать выборку X = (X1, X2) из ​​двумерного нормали, в которой каждый маргинал равен N (0,1), а корреляция между X1 и X2 равна 0,5.

Я думаю, что путь к этому - использовать функцию mvrnorm, но я не совсем уверен, как действовать после этого. Любой совет? Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 31 января 2020

Действительно, функция mvrnorm из пакета MASS, вероятно, является лучшим выбором. Эта функция может генерировать псевдослучайные данные из многомерных нормальных распределений.

Изучение страницы справки для этой функции (??mvrnorm) показывает, что для моделирования ваших данных на основе заданных вами параметров вам потребуется три ключевых аргумента, ie:

  • n - количество требуемых выборок (целое число);
  • mu - вектор, дающий средние значения переменных - здесь ваши распределения стандартно нормальны, поэтому это будет вектор нулей; и
  • Sigma - положительно определенная симметричная c матрица, задающая ковариационную матрицу переменных - ie, в вашем случае матрица с дисперсией по диагонали единиц и ковариантностью по выкл. -диагоналы 0,5.

Посмотрите примеры на этой странице справки, которые должны помочь вам объединить эти идеи!

0 голосов
/ 12 февраля 2020

Вот несколько параметров:

1) mvtnorm::rmvnorm и MASS::mvrnorm работают одинаково, хотя функция mvtnorm::rmvnorm не требует указания средств (т. Е. По умолчанию 0) , При присвоении имен вектору mu имена имитируемых переменных будут указываться.

n <- 100
R <- matrix(c(1, 0.5,
              0.5, 1), 
            nrow = 2, ncol = 2)

mu <- c(X = 0, Y = 0)
mvtnorm::rmvnorm(n, mean = mu, sigma = R)
MASS::mvrnorm(n, mu = mu, Sigma = R)

2) simstandard::sim_standardized будет создавать только стандартизированные данные, но будет делать это с меньшим набором:

simstandard::sim_standardized("X ~~ 0.5 * Y", n = 100)
...