Как я могу сделать выборку из распределения смеси, и в частности из смеси нормальных распределений в R
? Например, если я хотел сделать выборку из:
как я мог это сделать?
r
random-generation
mixture
Gung - Восстановить Монику
источник
источник
Ответы:
Рекомендуется избегать
for
цикловR
по причинам производительности. Альтернативное решение, которое использует этот фактrnorm
, векторизовано:источник
samples <- rnorm(N)*sds[components]+mus[components]
. Мне легче читать :)В общем, один из самых простых способов отбора проб из распределения смеси заключается в следующем:
Шаги алгоритма
3) Повторите шаги 1) и 2), пока не получите желаемое количество образцов из распределения смеси
Теперь, используя общий алгоритм, приведенный выше, вы можете взять из вашего примера смесь нормалей, используя следующий
R
код:Который генерирует:
и как проверка работоспособности:
источник
R
источник
ifelse()
заявлении, но я должен это выяснить позже. Я заменил этот код с циклом.R
findInterval()
cumsum()
mu
s
p
mix <- function(n,mu,s,p) { ii <- findInterval(runif(n),cumsum(p))+1; x <- rnorm(n,mean=mu[ii],sd=sqrt(s[ii])); return(x); }
findInterval()
команду раньше, однако мне нравится писать код здесь максимально упрощенно, потому что я хочу, чтобы она была инструментом для понимания, а не эффективности.Уже даны отличные ответы, поэтому для тех, кто хочет достичь этого в Python, вот мое решение:
источник