To pytanie jest motywowane moim pytaniem dotyczącym metaanalizy . Ale wyobrażam sobie, że przydałoby się to również w nauczaniu kontekstów, w których chcesz utworzyć zestaw danych, który dokładnie odzwierciedla istniejący opublikowany zestaw danych.
Wiem, jak generować losowe dane z danej dystrybucji. Na przykład, jeśli przeczytam o wynikach badania, które:
- średnio 102,
- odchylenie standardowe 5,2, oraz
- wielkość próbki 72.
Mógłbym wygenerować podobne dane używając rnorm
R. Na przykład
set.seed(1234)
x <- rnorm(n=72, mean=102, sd=5.2)
Oczywiście średnia i SD nie byłyby dokładnie równe odpowiednio 102 i 5,2:
round(c(n=length(x), mean=mean(x), sd=sd(x)), 2)
## n mean sd
## 72.00 100.58 5.25
Ogólnie interesuje mnie, jak symulować dane, które spełniają zestaw ograniczeń. W powyższym przypadku stałymi są wielkość próby, średnia i odchylenie standardowe. W innych przypadkach mogą istnieć dodatkowe ograniczenia. Na przykład,
- minimalne i maksymalne dane lub zmienna bazowa mogą być znane.
- wiadomo, że zmienna przyjmuje tylko wartości całkowite lub tylko wartości nieujemne.
- dane mogą obejmować wiele zmiennych o znanych wzajemnych korelacjach.
pytania
- Ogólnie, jak mogę symulować dane, które dokładnie spełniają zestaw ograniczeń?
- Czy są na ten temat artykuły? Czy są jakieś programy w R, które to robią?
- Na przykład, w jaki sposób i powinienem symulować zmienną, aby miała określoną średnią i sd?
r
dataset
simulation
random-generation
Jeromy Anglim
źródło
źródło
x<-rnorm(72);x<-5.2*(x-mean(x))/sd(x)+102
Robi lewę.Odpowiedzi:
Ogólnie rzecz biorąc, aby średnia i wariancja w próbce były dokładnie równe z góry określonej wartości, można odpowiednio przesunąć i skalować zmienną. W szczególności, jeśli jest próbką, a następnie nowymi zmiennymiX1,X2,...,Xn
gdzieX¯¯¯¯=1n∑ni=1Xi s2X=1n−1∑ni=1(Xi−X¯¯¯¯)2 Zi c2 c1
utworzy zestaw danych który jest ograniczony do przedziału .B1,...,Bn (a,b)
Uwaga: Te typy przesunięcia / skalowania zasadniczo zmienią rodzinę dystrybucyjną danych, nawet jeśli oryginalne dane pochodzą z rodziny o skali lokalizacji.
W kontekście tego rozkładu normalnego
mvrnorm
funkcja wR
pozwala symulować normalne (lub wielowymiarowych normalny) dane z góry określonej próbki oznaczać / kowariancji przez ustawienieempirical=TRUE
. W szczególności funkcja ta symuluje dane z rozkładu warunkowego zmiennej normalnie rozłożonej, biorąc pod uwagę średnią próbkę i (ko) wariancję równą z góry określonej wartości . Zauważ, że wynikowe rozkłady krańcowe nie są normalne, jak zauważył @whuber w komentarzu do głównego pytania.Oto prosty przykład z jedną zmienną, w którym średnia próbki (z próbki ) jest ograniczona do 0, a odchylenie standardowe próbki wynosi 1. Widzimy, że pierwszy element jest znacznie bardziej podobny do rozkładu równomiernego niż normalny dystrybucja:n=4
źródło
Jeśli chodzi o twoją prośbę o dokumenty, istnieją:
Nie jest to dokładnie to, czego szukasz, ale może służyć jako młyn do młyna.
Jest inna strategia, o której nikt chyba nie wspomniał. Możliwe jest generowanie (pseudo) losowych danych ze zbioru o rozmiarze tak że cały zestaw spełnia ograniczenia, o ile pozostałe danych jest ustawione na odpowiednie wartości. Wymagane wartości powinny być możliwe do rozwiązania za pomocą układu równań , algebry i pewnego smaru łokciowego.N−k N k k k
Na przykład, aby wygenerować zestaw danych z rozkładu normalnego, który będzie miał podaną średnią próbkową, i wariancję, , musisz naprawić wartości dwóch punktów: i . Ponieważ średnia próbki to: musi być: Przykładowa wariancja to: ten sposób (po zamianie powyższego na , foliowanie / dystrybucja i zmiana kolejności ... ) otrzymujemy:N x¯ s2 y z
R
Podejście to należy zrozumieć. Po pierwsze, nie ma gwarancji, że zadziała. Na przykład, możliwe jest, że początkowe Dane są takie, że nie ma wartości i tego, że istnieją będzie wariancji Otrzymaną równy . Rozważać:N−2 y z s2
Po drugie, podczas gdy standaryzacja sprawia, że rozkłady krańcowe wszystkich twoich zmiennych są bardziej jednolite, to podejście wpływa tylko na dwie ostatnie wartości, ale sprawia, że ich rozkłady krańcowe są wypaczone:
Po trzecie, uzyskana próbka może nie wyglądać bardzo normalnie; może to wyglądać tak, jakby zawierało „wartości odstające” (tj. punkty, które pochodzą z innego procesu generowania danych niż reszta), ponieważ tak jest w istocie. Jest to mniej prawdopodobne, że będzie to stanowić problem w przypadku większych próbek, ponieważ statystyki próbek z wygenerowanych danych powinny być zbieżne z wymaganymi wartościami, a zatem wymagać mniejszego dostosowania. Przy mniejszych próbkach zawsze możesz połączyć to podejście z algorytmem akceptowania / odrzucania, który próbuje ponownie, jeśli wygenerowana próbka ma statystyki kształtu (np. Skośność i kurtoza), które są poza dopuszczalnymi granicami (por. Komentarz kardynała ) lub rozszerzyć takie podejście do generowania próbki o ustalonej średniej, wariancji, skośności ikurtoza (ale zostawię tobie algebrę). Alternatywnie, możesz wygenerować niewielką liczbę próbek i użyć tej z najmniejszą (powiedzmy) statystyką Kołmogorowa-Smirnowa.
źródło
Ogólna technika to „Metoda odrzucenia”, w której po prostu odrzucasz wyniki, które nie spełniają twoich ograniczeń. Jeśli nie masz wskazówek (np. MCMC), możesz generować wiele przypadków (w zależności od scenariusza), które są odrzucane!
Jeśli szukasz czegoś w rodzaju średniej i odchylenia standardowego i możesz utworzyć metrykę odległości, aby określić, jak daleko jesteś od celu, możesz użyć optymalizacji do wyszukiwania zmiennych wejściowych, które dają pożądany wynik wartości.
Jako brzydki przykład, w którym szukamy losowego jednorodnego wektora o długości 100, który ma średnią = 0 i odchylenie standardowe = 1.
źródło
Pakiet Runuran R zawiera wiele metod generowania losowych zmiennych. Wykorzystuje biblioteki C z projektu UNU.RAN (Universal Non-Uniform RAndom Number generator). Moja własna wiedza na temat generowania zmiennych losowych jest ograniczona, ale winieta Runuran zapewnia ładny przegląd. Poniżej znajdują się dostępne metody w pakiecie Runuran, zaczerpnięte z winiety:
Ciągłe dystrybucje:
Dyskretne rozkłady:
Rozkłady wielowymiarowe:
Przykład:
Na przykład, załóżmy, że chcesz wygenerować rozkład normalny ograniczony od 0 do 100:
Ta
urnorm()
funkcja jest wygodną funkcją owijania. Uważam, że za kulisami używa metody interpolacji wielomianowej odwrotnej CDF, ale nie jestem pewien. Dla czegoś bardziej złożonego, powiedzmy, dyskretny rozkład normalny ograniczony od 0 do 100:źródło
Wygląda na to, że pakiet R spełniający twoje wymagania został opublikowany wczoraj! simstudy Keith Goldfeld
źródło
To odpowiedź przychodzi tak późno, że prawdopodobnie nie ma ona znaczenia, ale zawsze istnieje rozwiązanie MCMC. Mianowicie, aby rzutować gęstość połączenia próbki na kolektor zdefiniowany przez ograniczenia, na przykład Jedynym problemem jest wówczas symulacja wartości w tym kolektorze, tj. znalezienie parametryzacji właściwego wymiaru. Artykuł z 2015 roku autorstwa Bornna, Shepharda i Solgi analizuje ten bardzo problem (z ciekawą, jeśli nie ostateczną odpowiedzią ).
źródło
Ta odpowiedź rozważa inne podejście do przypadku, w którym chcesz zmusić wariaty do położenia się w określonym zakresie i dodatkowo dyktować średnią i / lub wariancję.
Ogranicz naszą uwagę do interwału jednostkowego . Użyjmy średniej ważonej dla ogólności, więc napraw niektóre wagi pomocą lub ustaw jeśli chcesz standardowej wagi. Załóżmy, że ilości i reprezentują odpowiednio pożądaną (ważoną) średnią i (ważoną) wariancję. Górna granica jest konieczna, ponieważ jest to maksymalna możliwa wariancja w jednostkowym przedziale. Jesteśmy zainteresowani rysowaniem niektórych wariantów z z tymi ograniczeniami momentu.[0,1] wk∈[0,1] ∑Nk=1wk=1 wk=1/N μ∈(0,1) 0<σ2<μ(1−μ) σ2 x1,...,xN [0,1]
Najpierw narysujemy kilka odmian z dowolnego rozkładu, np. . Rozkład ten wpłynie na kształt rozkładu końcowego. Następnie ograniczamy je do przedziału jednostek za pomocą funkcji logistycznej:y1,...,yN N(0,1) [0,1]
Jednak zanim to zrobimy, jak widać w powyższym równaniu, przekształcamy za pomocą translacji i skali . Jest to analogiczne do pierwszego równania w odpowiedzi @ Macro. Sztuką jest wybrać i tak, że przekształcone zmienne mieć pożądaną chwilę (y). Oznacza to, że do przechowywania potrzebujemy jednego lub obu następujących elementów:yk h v h v x1,...,xN
Analityczne odwrócenie tych równań dla i nie jest możliwe, ale wykonanie liczbowe jest proste, zwłaszcza że pochodne w odniesieniu do i są łatwe do obliczenia; zajmuje tylko kilka iteracji metody Newtona.v h v h
Jako pierwszy przykład załóżmy, że zależy nam jedynie na ograniczeniu średniej ważonej, a nie na wariancji. Fix , , , . Następnie dla leżących u podstaw rozkładów , i otrzymujemy odpowiednio następujące histogramy i takie, że średnia zmiennych wynosi dokładnie (nawet dla małych ):v = 1 w k = 1 / N N = 200000 N ( 0 , 1 ) N ( 0 , 0,1 ) Unif ( 0 , 1 ) 0,8 Nμ=0.8 v=1 wk=1/N N=200000 N(0,1) N(0,0.1) Unif(0,1) 0.8 N
Następnie ograniczmy zarówno średnią, jak i wariancję. Weźmy , , i rozważmy trzy pożądane odchylenia standardowe . Stosując ten sam podstawowy rozkład , tutaj są histogramy dla każdego:w k = 1 / N N = 2000 σ = 0,1 , 0,05 , 0,01 N ( 0 , 1 )μ=0.2 wk=1/N N=2000 σ=0.1,0.05,0.01 N(0,1)
Pamiętaj, że mogą one wyglądać nieco rozproszone w wersji beta, ale nie są.
źródło
W mojej odpowiedzi tutaj wymieniłem trzy pakiety R do zrobienia tego:
źródło