Jak wygenerować sekwencję


11

Wiem, jak wygenerować sekwencję ±1 ze średnią 0 . Na przykład w programie Matlab, jeśli chcę wygenerować sekwencję ±1 o długości 10000 , jest to:

2*(rand(1, 10000, 1)<=.5)-1

Jak jednak wygenerować sekwencję ±1 ze średnią 0,05 , tj. Z 1 która jest nieco preferowana?

Odpowiedzi:


18

Żądaną średnią podaje równanie:

N.p-N.(1-p)N.=.05

z czego wynika, że ​​prawdopodobieństwo 1spowinno być.525

W Pythonie:

x = np.random.choice([-1,1], size=int(1e6), replace = True, p = [.475, .525])

Dowód:

x.mean()
0.050742000000000002

1'000 eksperymentów z 1'000'000 próbek 1s i -1s: wprowadź opis zdjęcia tutaj

Dla kompletności (wskazówka dla @Elvis):

import scipy.stats as st
x = 2*st.binom(1, .525).rvs(1000000) - 1
x.mean()
0.053859999999999998

1'000 eksperymentów z 1'000'000 próbek 1s i -1s:

wprowadź opis zdjęcia tutaj

I wreszcie rysunek z jednolitego rozkładu, jak sugeruje @ Łukasz Deryło (także w Python):

u = st.uniform(0,1).rvs(1000000)
x = 2*(u<.525) -1
x.mean()
0.049585999999999998

1'000 eksperymentów z 1'000'000 próbek 1s i -1s:

wprowadź opis zdjęcia tutaj

Wszystkie trzy wyglądają praktycznie identycznie!

EDYTOWAĆ

Kilka linii na temat centralnego twierdzenia o granicy i rozkład rozkładów wynikowych.

Po pierwsze, losowanie środków rzeczywiście następuje po rozkładzie normalnym.

Po drugie, @Elvis w swoim komentarzu do tej odpowiedzi wykonał kilka ładnych obliczeń na temat dokładnego rozkładu średnich uzyskanych w ciągu 1 000 eksperymentów (około (0,048; 0,052)), przy 95% przedziale ufności.

Oto wyniki symulacji, które potwierdzają jego wyniki:

mn = []
for _ in range(1000):
    mn.append((2*st.binom(1, .525).rvs(1000000) - 1).mean())
np.percentile(mn, [2.5,97.5])
array([ 0.0480773,  0.0518703])

Dobra robota. Moim celem w przypadku Bernoulliego było sprowadzenie pytania do dobrze znanego rozkładu prawdopodobieństwa; z punktu widzenia „wdrożenia” Twoja odpowiedź i Łukasz „były doskonałe”.
Elvis

Bez żartów, twój jest najbardziej naukowy i najlepszy! ;) Myślałem o rozkładzie dwumianowym przez pół sekundy, ale to nie wystarczyło, aby zamienić go na -1 i 1, więc pożyczyłem twoje rozwiązanie „tak jak jest”, dzięki!
Sergey Bushmanov,

1
Tak więc z moimi notacjami , a standardowe odchylenie wynosi . Gdy weźmiesz średnią z próbek, odchylenie standardowe wynosi a 95% obliczonych średnich powinno znajdować się w przedziale , czyli . Matematyka sprawdź! ;)Y 0,999 10 6 0,999 × 10 - 3 0,05 ± 1,96 × 0,999 × 10 - 3 ( 0,048 ; 0,052 )var(Y)=4var(X)=4p(1-p)=0,9975Y0,9991060,999×10-3)0,05±1,96×0,999×10-3)(0,048;0,052)
Elvis,

12

Zmienna o wartościach i ma postać z a Bernoulli z parametrem . Jego oczekiwana wartość to , więc wiesz, jak uzyskać (tutaj ).1 Y = 2 X - 1 X p E ( Y ) = 2 E ( X ) - 1 = 2 p - 1 p p = 0,525-11Y=2)X-1Xpmi(Y)=2)mi(X)-1=2)p-1pp=0,525

W R możesz generować zmienne Bernoulliego za pomocą rbinom(n, size = 1, prob = p), więc na przykład

x <- rbinom(100, 1, 0.525)
y <- 2*x-1

5

Wygeneruj próbek równomiernie z , przekoduj liczby mniejsze niż 0,525 do 1 i spoczywaj do -1.[ 0 , 1 ]N.[0,1]

Zatem twoja oczekiwana wartość to

10,525+(-1)(1-0,525)=0,525-0,475=0,05

Nie jestem użytkownikiem Matlaba, ale chyba tak powinno być

2*(rand(1, 10000, 1)<=.525)-1

3
To jest poprawny sposób zastosowania odwrotnego próbkowania transformacji tutaj.
Tim

4

Musisz wygenerować więcej 1s niż -1s. Dokładnie 5% więcej 1s, ponieważ chcesz, aby Twoja średnia wynosiła 0,05. Tak więc zwiększasz prawdopodobieństwo 1s o 2,5% i zmniejszasz -1s o 2,5%. W twoim kodzie odpowiada to zmianie 0.5na 0.525, tj. Z 50% na 52,5%


2

Na wszelki wypadek, gdy chcesz DOKŁADNIE 0.05, możesz zrobić odpowiednik następującego kodu R w MATLAB:

sample(c(rep(-1, 95*50), rep(1, 105*50)))

-1 ta odpowiedź jest błędna! Jedyne, co robi ten kod, to losowe dopuszczenie statycznego wektora wartości. Wynik nie jest przypadkowy!
Tim

2
@Tim Dlaczego to nie działa? Zwraca listę -1 i 1 w losowej kolejności z zliczeniami zaprojektowanymi w celu zapewnienia dokładnej średniej 0,05.
ddunn801

1
@Tim To rozwiązanie jest losowe. Czy próbowałeś uruchomić go wielokrotnie?
whuber

@ gdy to jest to samo, co rozwiązanie zaproponowane przez Amos Coats, jedyną różnicą jest permutacja wartości. Właściwości statystyczne takiej próbki będą deterministyczne i stałe.
Tim

3
@Tim Myślę, że możesz czytać jakieś nieuzasadnione założenia do tego pytania, które nie zostały wyraźnie określone. Chociaż częstotliwości - a zatem wszystkie momenty - samej próbki nieuporządkowanej będą stałe, ogromna różnorodność „właściwości statystycznych” generowanej serii będzie się zmieniać losowo. Ponieważ przykład w pytaniu generuje tablicę, a tablice nie są zestawami - kolejność ma znaczenie w tablicy - myślę, że ta interpretacja jest słuszna (i wyjaśnia pytanie). Z drugiej strony „rozwiązanie” opublikowane przez Coatsa to dobry żart - ale SE nie lubi żartować.
whuber
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.