W języku R, jaki jest najlepszy sposób symulacji arbitralnej zmiennej losowej jednowymiarowej, jeśli dostępna jest tylko funkcja gęstości prawdopodobieństwa?Jak najlepiej symulować dowolną losową zmienną jednowymiarową za pomocą jej funkcji prawdopodobieństwa?
Odpowiedz
Oto (powolna) implementacja metody odwrotnego cdf, gdy otrzymuje się tylko gęstość.
den<-dnorm #replace with your own density
#calculates the cdf by numerical integration
cdf<-function(x) integrate(den,-Inf,x)[[1]]
#inverts the cdf
inverse.cdf<-function(x,cdf,starting.value=0){
lower.found<-FALSE
lower<-starting.value
while(!lower.found){
if(cdf(lower)>=(x-.000001))
lower<-lower-(lower-starting.value)^2-1
else
lower.found<-TRUE
}
upper.found<-FALSE
upper<-starting.value
while(!upper.found){
if(cdf(upper)<=(x+.000001))
upper<-upper+(upper-starting.value)^2+1
else
upper.found<-TRUE
}
uniroot(function(y) cdf(y)-x,c(lower,upper))$root
}
#generates 1000 random variables of distribution 'den'
vars<-apply(matrix(runif(1000)),1,function(x) inverse.cdf(x,cdf))
hist(vars)
Zastosowanie skumulowany rozkład funkcji http://en.wikipedia.org/wiki/Cumulative_distribution_function
Następnie wystarczy użyć jego odwrotność. Sprawdź tutaj lepszy obraz http://en.wikipedia.org/wiki/Normal_distribution
To znaczy: podnieść liczbę losową z [0,1] i ustawić jako CDF, a następnie sprawdzić Wartość
nazywany jest również odwrotna dystrybuanta.
Możesz użyć metropolis-hastings, aby pobrać próbki z gęstości.
Aby wyjaśnić "użytkowania Metropolis-Hastings" odpowiedź powyżej:
Załóżmy ddist()
jest twoja funkcja gęstości prawdopodobieństwa
coś takiego:
n <- 10000
cand.sd <- 0.1
init <- 0
vals <- numeric(n)
vals[1] <- init
oldprob <- 0
for (i in 2:n) {
newval <- rnorm(1,mean=vals[i-1],sd=cand.sd)
newprob <- ddist(newval)
if (runif(1)<newprob/oldprob) {
vals[i] <- newval
} else vals[i] <- vals[i-1]
oldprob <- newprob
}
Uwagi:
- całkowicie nieprzetestowana
- wydajność zależy od dystrybucji kandydata (tj. wartość
cand.sd
). Dla maksymalnej wydajności, dostroićcand.sd
do stopy akceptacji 25-40% - wyniki zostaną autokorelacji ... (chociaż myślę, że zawsze można
sample()
wyniki ich wspiąć lub cienkiej) - mogą wymagać odrzucić „wypalenia”, jeśli wartość początkowa jest dziwne
klasycznym podejściem do tego problemu jest odrzucenie próbkowania (patrz np Press i wsp Numerical Recipes)
- 1. Jak wygenerować losową unikalną liczbę w PostgreSQL za pomocą funkcji
- 2. Jak symulować składanie formularza za pomocą jQuery?
- 3. Mnożenie tensora prawdopodobieństwa za pomocą pandas.DataFrame
- 4. Jak zadeklarować zmienną w zakresie danej funkcji za pomocą GDB?
- 5. Biorąc pod uwagę zmienną losową z funkcją gęstości prawdopodobieństwa f (x), jak obliczyć oczekiwaną wartość tej zmiennej losowej w R?
- 6. Jak mogę wyciągnąć dowolną klasę przez jej cid w Backbone?
- 7. Emacs: jak znaleźć zmienną według jej wartości?
- 8. opengl, jak najlepiej zaktualizować nagłówki za pomocą Visual Studio?
- 9. Jak klawiatura wpisać zmienną za pomocą xdotool?
- 10. Jak eksportować zmienną za pomocą skryptu powłoki?
- 11. Jak kontrolować zmienną Sassa za pomocą javascript
- 12. Jak ustawić zmienną środowiskową za pomocą Chef?
- 13. Jak symulować pisanie w polu wejściowym za pomocą jQuery?
- 14. Jak symulować żądanie wpisu HTTP za pomocą modułu zapytań Python?
- 15. Jak symulować aktywację za pomocą skryptów JavaScript przy keydown?
- 16. Szablon funkcji odbierający dowolną standardową mapę
- 17. Szybsze przekształcanie funkcji gęstości prawdopodobieństwa w Pythonie
- 18. Jak zdefiniować zmienną w pliku .htaccess i używać jej?
- 19. Dezaktywować przycisk za pomocą funkcji?
- 20. Jak najlepiej radzić sobie z plikami danych za pomocą CMake?
- 21. Jak najlepiej zarządzać połączeniami Redis za pomocą ServiceStack?
- 22. Sortowanie za pomocą funkcji porównanie funkcji
- 23. Jak przekazać dowolną metodę (lub delegować) jako parametr do funkcji?
- 24. Jak mogę wybrać liczbę losową, ale z normalnym rozkładem prawdopodobieństwa w PHP?
- 25. Jak zainicjalizować zmienną gensim corpus za pomocą csr_matrix?
- 26. Jak zamówić kolekcję i jej podkolekcje za pomocą LINQ?
- 27. Jak przypisać losową liczbę do zmiennej?
- 28. JMeter - obliczyć zmienną za pomocą innej zmiennej
- 29. Czy mogę symulować zaznaczanie tekstu za pomocą myszy w JavaScript?
- 30. Golang: Uzyskiwanie dostępu do mapy za pomocą jej odwołania
Niesamowite pytanie! –