Jak mogę próbkować z rozkładu mieszaniny, a w szczególności mieszaniny rozkładów normalnych w R
? Na przykład, jeśli chcę próbkować z:
jak mogłem to zrobić?
r
random-generation
mixture
gung - Przywróć Monikę
źródło
źródło
Odpowiedzi:
Dobrą praktyką jest unikanie
for
pętliR
ze względu na wydajność. Alternatywne rozwiązanie wykorzystujące ten faktrnorm
jest wektoryzowane:źródło
samples <- rnorm(N)*sds[components]+mus[components]
. Łatwiej mi to czytać :)Zasadniczo jednym z najprostszych sposobów próbkowania z rozkładu mieszanki jest:
Kroki algorytmu
1) Wygeneruj zmienną losowąU∼ Jednolite ( 0 , 1 )
3) Powtarzaj kroki 1) i 2), aż uzyskasz żądaną ilość próbek z rozkładu mieszaniny
Teraz, używając ogólnego algorytmu podanego powyżej, możesz próbkować z przykładowej mieszanki normałów, używając następującego
R
kodu:Co generuje:
i dla kontroli zdrowia:
źródło
R
źródło
ifelse()
oświadczeniu, ale muszę to później zrozumieć. Zamieniłem ten kod z pętlą.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()
wcześniej polecenia, jednak lubię pisać tutaj kod tak uproszczony, jak to tylko możliwe, ponieważ chcę, aby było to narzędzie do zrozumienia, a nie wydajności.Mam już doskonałe odpowiedzi, więc dla tych, którzy chcą to osiągnąć w Pythonie, oto moje rozwiązanie:
źródło