Odpowiedzi:
Żądaną średnią podaje równanie:
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
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
Wygeneruj próbek równomiernie z , przekoduj liczby mniejsze niż 0,525 do 1 i spoczywaj do -1.[ 0 , 1 ]
Zatem twoja oczekiwana wartość to
Nie jestem użytkownikiem Matlaba, ale chyba tak powinno być
2*(rand(1, 10000, 1)<=.525)-1
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)))