Генерация многомерных ненормальных случайных чисел в R - PullRequest
0 голосов
/ 09 февраля 2020

Фон

Я хочу сгенерировать многомерные распределенные случайные числа с фиксированной матрицей дисперсии. Например, я хочу сгенерировать двумерные данные с covariance value = 0.5, each dimensional variance = 1. Первый маргинал данных - это распределение норм с mean = 0, sd = 1, а следующий - экспоненциальное распределение с rate = 2.

Моя попытка

Моя попытка состоит в том, чтобы мы могли сгенерировать коррелированную мультинормальную распределение случайных чисел, а затем пересмотрел их для любого распределения с помощью выборки обратного преобразования .

Ниже я приведу пример преобразования двумерных случайных чисел с нормальным распределением в случайное число norm(0,1)+ exp(2) :

# generate a correlated multi-normal distribution, data[,1] and data[,2] are standard norm
data <- mvrnorm(n = 1000,mu = c(0,0), Sigma = matrix(c(1,0.5,0.5,1),2,2))
# calculate the cdf of dimension 2
exp_cdf = ecdf(data[,2])
Fn = exp_cdf(data[,2])  
# inverse transform sampling to get Exponetial distribution with rate = 2
x = -log(1-Fn + 10^(-5))/2
mean(x);cor(data[,1],x)

Out:

[1] 0.5035326
[1] 0.436236

С выходов новый x представляет собой набор экспоненциальных (скорость = 2) случайных чисел. Кроме того, x и data[,1] соотносятся с 0.43. Коррелированная дисперсия составляет 0.43, что не очень близко к исходному значению 0.5. Это может быть проблемой. Я думаю, что ковариация сгенерированного образца должна оставаться ближе к первоначальному значению. В общем, я думаю, что мой метод не совсем приличный, может быть, у вас, ребята, есть некоторые удивительные фрагменты кода.

Мой вопрос

Как выпускник статистики, я знаю, что существует более 10 методов для генерации многомерных случайные числа теоретически. В этом посте я хочу собрать кучу фрагментов кода, чтобы сделать это автоматически с помощью пакетов или удобно. И тогда я буду сравнивать их с разных сторон, например time consuming и quality of data et c. Любые идеи приветствуются!

Примечание

Некоторые пользователи считают, что я прошу рекомендации по пакету. Однако я не ищу никаких рекомендаций. Я уже знал широко используемые статистические теромы и R-пакеты. Я просто хочу знать, как генерировать многомерные распределенные случайные числа с фиксированной матрицей дисперсии прилично и привести пример кода для генерации norm + exp случайных чисел. Я думаю, что должны существовать более мощные фрагменты кода, чтобы сделать это достойным образом! Поэтому я прошу помощи прямо сейчас!

Источники :

  1. генерация-коррелированные-случайные-переменные, математика

  2. использование связок для генерации многомерных случайных чисел, стекопотока

  3. имитация Росса, теоретическая книга

  4. R Задача распространения CRAN Просмотр

...