Как генерировать случайные числа с искаженным нормальным распределением в R? - PullRequest
1 голос
/ 28 февраля 2020

Я пытаюсь сгенерировать 1000 наборов из 130 случайных чисел, которые соответствуют искаженному нормальному распределению чисел ниже:

-10.4, -9.3, -6.8, -4.8, -5.7, 5.8, -4.5, -3.4, -2, 0.3, -0.4, -4.1, -6.9, -5.9, -2.5, -2, -2.8, -3.2, -4.4, -2, -1.4, 0.9, -1, -4.1, -11.7, 0.1

Среднее значение этих чисел -3,99, стандартное отклонение 3,17, перекос равен -0,71, а эксцесс равен 0,22.

Чтобы получить 1000 наборов из 130 случайных чисел, я пробовал это:

install.packages("sn")
library(sn)

p <- rmsn(n = 130, 
          xi = rep(-3.99, 1000), 
          Omega = diag(1000), 
          alpha = rep(-0.71, 1000), 
          tau = -0.71)

Я получаю 1000 векторов из 130 случайных чисел со средним -3,99. Тем не менее, они не имеют перекоса -0,71, и я не знаю, как установить стандартное отклонение на 3,17 или эксцесс на 0,22.

Любая помощь будет принята с благодарностью!

1 Ответ

4 голосов
/ 28 февраля 2020

С помощью функции cp2dp вы можете преобразовать среднее значение популяции, стандартное отклонение популяции и асимметрию популяции в параметры xi, omega и alpha нормального распределения.

library(sn)
params <- cp2dp(c(-3.99, 3.17, -0.71), "SN")
sims <- replicate(1000, rsn(130, dp = params))

Семейство SN поддерживает наклон только между -0,99527 и 0,99527. За пределами этого диапазона требуется семейство ST, для которого требуется четвертая переменная: kurtosis:

library(sn)
params <- cp2dp(c(-3.99, 3.17, -1.71, 2.37), "ST")
sims <- replicate(1000, rst(130, dp = params))

Обратите внимание, что в этом случае вместо rrsn используется rst.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...