rnorm генерирует неслучайно выглядящие реализации - PullRequest
0 голосов
/ 16 февраля 2019

Я отлаживал симуляцию и обнаружил, что когда я запускаю rnorm(), мои случайные нормальные значения вообще не выглядят случайными для меня.ccc - средний вектор sd, заданный параметрически.Как я могу получить действительно случайные нормальные реализации?Поскольку мое оригинальное моделирование довольно длинное, я не хочу вдаваться в выборку Гиббса ... Должны ли вы знать, почему я получаю неслучайно выглядящие реализации нормальных случайных величин?

> ccc  
# [1] 144.66667  52.52671  

> rnorm(20, ccc)  
# [1] 144.72325  52.31605 144.44628  53.07380 144.64438  53.87741 144.91300  54.06928 144.76440  
# [10]  52.09181 144.61817  52.17339 145.01374  53.38597 145.51335  52.37353 143.02516  52.49332  
# [19] 144.27616  54.22477

> rnorm(20, ccc)  
# [1] 143.88539  52.42435 145.24666  50.94785 146.10255  51.59644 144.04244  51.78682 144.70936  
# [10]  53.51048 143.63903  51.25484 143.83508  52.94973 145.53776  51.93892 144.14925  52.35716  
# [19] 144.08803  53.34002 

1 Ответ

0 голосов
/ 16 февраля 2019

Это базовая концепция установки параметров в функции.Возьмем rnorm(), например:

Его структура rnorm(n, mean = 0, sd = 1).Очевидно, что mean и sd - это два разных параметра, поэтому вам необходимо присвоить им соответствующие значения.Вот запутанная ситуация, в которой вы можете застрять:

arg <- c(5, 10)
rnorm(1000, arg)

Это на самом деле означает rnorm(n = 1000, mean = c(5, 10), sd = 1).Стандартное отклонение установлено равным 1, поскольку позиция arg представляет параметр mean, а вы не устанавливаете sd дополнительно.Следовательно, rnorm() примет значение по умолчанию от 1 до sd.Однако что означает mean = c(5, 10)?Давайте проверим:

x <- rnorm(1000, arg)
hist(x, breaks = 50, prob = T)
# lines(density(x), col = 2, lwd = 2)

enter image description here

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

arg <- c(5, 10)
rnorm(1000, arg[1], arg[2])

и это означает rnorm(n = 1000, mean = 5, sd = 10).Проверьте это еще раз, и вы получите нормальное распределение с mean = 5 и sd = 10.

x <- rnorm(1000, arg[1], arg[2])
hist(x, breaks = 50, prob = T)
# curve(dnorm(x, arg[1], arg[2]), col = 2, lwd = 2, add = T)

enter image description here

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