Żądaną średnią podaje równanie:
N.⋅ p - N⋅ ( 1 - p )N.= .05
z czego wynika, że prawdopodobieństwo 1s
powinno 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:
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:
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:
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])
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- 1 1 Y= 2 X- 1 X p mi( Y) = 2 E( X) - 1 = 2 p - 1 p p = 0,525
W R możesz generować zmienne Bernoulliego za pomocą
rbinom(n, size = 1, prob = p)
, więc na przykładźródło
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
Nie jestem użytkownikiem Matlaba, ale chyba tak powinno być
źródło
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.5
na0.525
, tj. Z 50% na 52,5%źródło
Na wszelki wypadek, gdy chcesz DOKŁADNIE 0.05, możesz zrobić odpowiednik następującego kodu R w MATLAB:
źródło