Krótka wersja poza kontekstem
Pozwolić być zmienną losową z CDF
Powiedzmy, że chciałem symulować losowania przy użyciu odwrotnej metody CDF. Czy to jest możliwe? Ta funkcja nie ma dokładnie odwrotności. Z drugiej strony istnieje próbkowanie z transformacją odwrotną dla rozkładu mieszanki dwóch rozkładów normalnych, co sugeruje, że istnieje znany sposób zastosowania próbkowania z transformacją odwrotną.
Znam metodę dwuetapową, ale nie wiem, jak zastosować ją w mojej sytuacji (patrz poniżej).
Długa wersja z tłem
Dopasowałem następujący model do odpowiedzi o wartości wektorowej, , używając MCMC (konkretnie Stan):
gdzie indeksy obserwacje, jest macierzą korelacji, oraz jest wektorem predyktorów / regresorów / funkcji.
Oznacza to, że mój model jest modelem regresyjnym, w którym zakłada się, że warunkowy rozkład odpowiedzi jest kopulą Gaussa z zerowymi napełnieniami logarytmiczno-normalnymi. Wcześniej pisałem o tym modelu; okazuje się, że Song, Li i Yuan (2009, gated ) opracowali go i nazywają go wektorem GLM lub VGLM. Poniżej podano ich specyfikację tak bliską dosłownym, jak to tylko możliwe:
Część z napompowaniem zerowym z grubsza jest zgodna ze specyfikacją Liu i Chana (2010 r., Niestrzeżona ).
Teraz chciałbym zasymulować dane z szacowanych parametrów, ale jestem trochę zdezorientowany, jak sobie z tym poradzić. Najpierw pomyślałem, że mogę po prostu symulować bezpośrednio (w kodzie R):
for (i in 1:N) {
for (k in 1:K) {
Y_hat <- rbinom(1, 1, 1 - theta[i, k])
if (Y_hat == 1)
Y_hat <- rlnorm(1, mu[i, k], sigma[k])
}
}
który nie używa w ogóle. Chciałbym spróbować użyć oszacowanej macierzy korelacji.
Mój następny pomysł polegał na losowaniu a następnie przekonwertować je z powrotem na . Wydaje się, że jest to również zbieżne z odpowiedziami w Generowanie próbek z Copuli w R i Bivariate próbkowania do dystrybucji wyrażonych w twierdzeniu o kopule Sklara? . Ale co do cholery jest mojetutaj? Odwrotne próbkowanie transformacji dla rozkładu mieszanki dwóch rozkładów normalnych sprawia, że brzmi to tak, jak to jest możliwe, ale nie mam pojęcia, jak to zrobić.
źródło
Odpowiedzi:
Odpowiedź na długą wersję z tłem:
Ta odpowiedź na długą wersję nieco rozwiązuje inny problem, a ponieważ wydaje się, że mamy trudności z sformułowaniem modelu i problemu, postanowiłem sformułować go tutaj, mam nadzieję, że poprawnie.
Dla1 ≤ i ≤ I , celem jest symulacja wektorów yja= (yja1, ... ,yjaK.) takie, które zależą od współzmiennej xja ,
yjak= {0log(σkzjak+βkxja) z prawdopodobieństwem logit- 1(αkxja) z prawdopodobieństwem 1 -logit- 1(αkxja)
z zja= (zja1, ... ,zjaK.) ∼N.K.( 0 , R ) . Dlatego jeśli chcemy symulować dane z tego modelu, można postępować w następujący sposób:
Dla1 ≤ i ≤ I ,
Jeśli ktoś jest zainteresowany pokoleniem od tyłu( α , β, μ , σ, R ) biorąc pod uwagę yjak , jest to trudniejszy problem, aczkolwiek wykonalny przez próbkowanie Gibbs lub ABC.
źródło
Odpowiedź na krótką wersję poza kontekstem:
„Odwracanie” pliku cdf, który nie jest odwracalny w sensie matematycznym (podobnie jak dystrybucja mieszana), jest wykonalne, jak opisano w większości podręczników Monte Carlo. (Podobnie jak nasz , patrz Lemat 2.4.) Jeśli zdefiniujesz uogólnioną odwrotność
To prawie to, co twój kod R.
Y_hat <- rbinom(1, 1, theta[i, k]) if (Y_hat == 1) Y_hat <- rlnorm(1, mu[i, k], sigma[k])
to robi. Generujesz Bernoulliego z prawdopodobieństwemθjak a jeśli to jest równe 1 , zamieniasz go w log-normalny. Ponieważ jest to równe 1 z prawdopodobieństwemθjak powinieneś zamiast tego przekształcić go w logarytmiczną symulację, gdy jest ona równa zero , kończąc na zmodyfikowanym kodzie R:
źródło